发新话题
打印

Sablog-X Ver 1.6 增加二级分类

本主题由 System 于 2008-8-15 05:00 解除限时高亮

Sablog-X Ver 1.6 增加二级分类

首先用phpmyadmin工具
sablog_categories增加字段:cid_2  smallint(6)  否  0

文件1:category.php
1.查找:
PHP代码
  • //分类操作
  • if (in_array($action, array('addcate', 'modcate', 'delcate'))) {  
  •     if ($action == 'addcate') {  
  •         $subnav = '添加分类';  
  •     } else {  
  •         $cate = $DB->fetch_one_array("SELECT * FROM {$db_prefix}categories WHERE cid='".intval($_GET['cid'])."'");  
  •         if($action == 'modcate') {  
  •             $subnav = '修改分类';  
  •         } else {  
  •             $subnav = '删除分类';  
  •         }  
  •     }  
  • }  


用下列代码替换:
PHP代码
  • //分类操作
  • if (in_array($action, array('addcate', 'modcate', 'delcate'))) {  
  •     if ($action == 'addcate') {  
  •         $subnav = '添加分类';  

  •         $query = $DB->query("SELECT cid,name FROM {$db_prefix}categories ORDER BY displayorder");  
  •         $catedb_list = array();  
  •         while ($cate_list=$DB->fetch_array($query)) {  
  •             $catedb_list[] = $cate_list;  
  •         }  
  •         unset($cate_list);  
  •         $DB->free_result($query);  


  •     } else {  

  •         $cate = $DB->fetch_one_array("SELECT * FROM {$db_prefix}categories WHERE cid='".intval($_GET['cid'])."'");  

  •         if($action == 'modcate') {  

  •             $query = $DB->query("SELECT cid,name FROM {$db_prefix}categories ORDER BY displayorder");  
  •             $catedb_list = array();  
  •             while ($cate_list=$DB->fetch_array($query)) {  
  •                 $catedb_list[] = $cate_list;  
  •             }  
  •             unset($cate_list);  
  •             $DB->free_result($query);  

  •             $subnav = '修改分类';  
  •         } else {  
  •             $subnav = '删除分类';  
  •         }  
  •     }  
  • }  

2.查找:
PHP代码
  • //添加分类

  • if($action == 'doaddcate') {  
  •     $name   = trim($_POST['name']);  
  •     $displayorder = intval($_POST['displayorder']);  

  •     $result = checkname($name);  

  •     if($result) {  

  •         redirect($result);  

  •     }  
  •     $name = char_cv($name);  

  •     $rs = $DB->fetch_one_array("SELECT count(*) AS categories FROM {$db_prefix}categories WHERE name='$name'");  

  •     if($rs['categories']) {  

  •         redirect('该分类名在数据库中已存在');  

  •     }  

  •     $DB->query("INSERT INTO {$db_prefix}categories (name,displayorder) VALUES ('$name','$displayorder')");  
  •     $DB->unbuffered_query("UPDATE {$db_prefix}statistics SET cate_count=cate_count+1");  
  •     categories_recache();  
  •     statistics_recache();  

  •     redirect('添加新分类成功', 'admincp.php?job=category');  

  • }  


  • //修改分类

  • if($action == 'domodcate') {  
  •     $name   = trim($_POST['name']);  
  •     $cid    = intval($_POST['cid']);  

  •     $result = checkname($name);  

  •     if($result) {  

  •         redirect($result);  

  •     }  
  •     $name = char_cv($name);  
  •     $rs = $DB->fetch_one_array("SELECT count(*) AS categories FROM {$db_prefix}categories WHERE cid!='$cid' AND name='$name'");  
  •     if($rs['categories']) {  
  •         redirect('已经有其他分类使用【'.$name.'】这个名称');  
  •     }  

  •     // 更新分类

  •     $DB->unbuffered_query("UPDATE {$db_prefix}categories SET name='$name' WHERE cid='$cid'");  

  •     categories_recache();  

  •     redirect('修改分类成功', 'admincp.php?job=category');  

  • }  

用下列代码替换:
PHP代码
  • //添加分类
  • if($action == 'doaddcate') {  
  •     $name   = trim($_POST['name']);  
  •     $displayorder = intval($_POST['displayorder']);  
  •     $result = checkname($name);  
  •     if($result) {  
  •         redirect($result);  
  •     }  
  •     $name = char_cv($name);  
  •     $rs = $DB->fetch_one_array("SELECT count(*) AS categories FROM {$db_prefix}categories WHERE name='$name'");  
  •     if($rs['categories']) {  
  •         redirect('该分类名在数据库中已存在');  
  •     }  
  •     $cid_2  = $_POST['cid_2'];  
  •         if($cid_2 == '== 选择分类 =='){  
  •             $DB->query("INSERT INTO {$db_prefix}categories (name,displayorder) VALUES ('$name','$displayorder')");  
  •         }else{  
  •             $DB->query("INSERT INTO {$db_prefix}categories (name,displayorder,cid_2) VALUES ('$name','$displayorder','$cid_2')");  
  •         }  
  •     $DB->unbuffered_query("UPDATE {$db_prefix}statistics SET cate_count=cate_count+1");  
  •     categories_recache();  
  •     statistics_recache();  
  •     redirect('添加新分类成功', 'admincp.php?job=category');  
  • }  

  • //修改分类
  • if($action == 'domodcate') {  
  •     $name   = trim($_POST['name']);  
  •     $cid    = intval($_POST['cid']);  
  •     $cid_2    = intval($_POST['cid_2']);  
  •     $result = checkname($name);  
  •     if($result) {  
  •         redirect($result);  
  •     }  
  •     $name = char_cv($name);  
  •     $rs = $DB->fetch_one_array("SELECT count(*) AS categories FROM {$db_prefix}categories WHERE cid!='$cid' AND name='$name'");  
  •     if($rs['categories']) {  
  •         redirect('已经有其他分类使用【'.$name.'】这个名称');  
  •     }  
  •     // 更新分类
  •     $DB->unbuffered_query("UPDATE {$db_prefix}categories SET name='$name',cid_2='$cid_2' WHERE cid='$cid'");  
  •     categories_recache();  
  •     redirect('修改分类成功', 'admincp.php?job=category');  
  • }  


文件2:include\cache.php
查找:
PHP代码
  • // 更新分类
  • function categories_recache() {  
  •     global
    $DB, $db_prefix;  
  •     $categories = $DB->query("SELECT * FROM {$db_prefix}categories ORDER BY displayorder");  
  •     $contents = "\$catecache = array(";  
  •     while ($cate = $DB->fetch_array($categories)) {  
  •         $contents.="\t'".$cate['cid']."' => array(\t\t'cid' => '".$cate['cid']."',\t\t'name' => '".addslashes($cate['name'])."',\t\t'articles' => '".$cate['articles']."',\t),";  
  •     }  
  •     $contents .= ');';  
  •     writetocache('categories',$contents);  
  • }  

用以下代码替换:


PHP代码
  • // 更新分类
  • function categories_recache() {  
  •     global
    $DB, $db_prefix;  
  •     $categories = $DB->query("SELECT * FROM {$db_prefix}categories ORDER BY displayorder");  
  •     $contents = "\$catecache = array(";  
  •     while ($cate = $DB->fetch_array($categories)) {  
  •         if($cate['cid_2']>0)$cate['name']='┗'.$cate['name'];  
  •         $contents.="\t'".$cate['cid']."' => array(\t\t'cid' => '".$cate['cid']."',\t\t'name' => '".addslashes($cate['name'])."',\t\t'articles' => '".$cate['articles']."',\t),";  
  •     }  
  •     $contents .= ');';  
  •     writetocache('categories',$contents);  
  • }  


文件3:\templates\admina\category.php
查找:

XML/HTML代码
  • <tr
    class="tablecell">
  •   <td>名称:</td>
  •   <td><input
    class="formfield"
    type="text"
    name="name"
    size="35"
    maxlength="50"
    value="$cate[name]"></td>
  • </tr>

在后面增加:
XML/HTML代码

  • <tr
    class="tablecell">
  •       <td>二级分类:</td>
  •       <td><select
    name="cid_2"
    id="cid_2">
  •             <option
    value="0"
    selected="selected">== 顶级分类 ==</option>
  • <!--  
  • EOT;  
  • $i=0;  
  • foreach($catedb_list as $key => $cate_list){  
  • $i++;  
  • $selected = ($cate_list['cid'] == $article['cid']) ? "selected" : "";  
  • print <<<EOT
  • -->
  •           <option
    value="$cate_list[cid]" $selected>$i. $cate_list[name]</option>
  • <!--  
  • EOT;  
  • }print <<<EOT
  • -->
  •         </select></td>
  •     </tr>

注意:
1、要在后台:【分类管理】中将二级分类与一级分类制定排序。比如【PHP】属于顶级分类则排序1,【函数】属于【PHP】的二级分类,则【函数】的排序为2。依次类推。

TOP

好文,自己hack,万事无忧!
Sablog-X  Plus 官方: http://www.sablogplus.org
http://www.ihjin.com

TOP

支持原创,谢谢分享.
最好能在后台的
1、分类管理二级分类排列显视;
2、添加文章里的的选择分类;
没有二级分类排列显视,感觉很混乱;
专注sablog
qq:1738143

TOP

不太明白哦
荷月听雨
www.snluf.cn

TOP

只是从界面上实现了二级分类

也就是把二级分类的前面加上了 “┗”

严格上 这不算二级分类

如果 只是从界面上实现还不如用HTML+CSS来实现

[ 本帖最后由 Yzsh! 于 2008-7-28 22:12 编辑 ]
给我一个女人,我可以创造一个民族!

TOP

en .......不错不错!支持了

TOP

发新话题