知识学习

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3045|回复: 0

destoon7.0后台栏目分类一键获取所有栏目拼音目录

[复制链接]

升级   100%

152

主题

0

回帖

752

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
752
发表于 2020-9-25 16:02:35 | 显示全部楼层 |阅读模式
废话不多说,上教程
    用于DESTOON7.0系统
        
    到admin 目录替换 category.inc.php
    刷新后台,然后每个模块的栏目分类后面会多一个菜单-批量拼音目录,点这个就菜单就可以了
   代码修改不陈述,直接上全部代码
    以下为category.inc.php代码
  1. <?php

  2. defined('DT_ADMIN') or exit('Access Denied');
  3. $mid or $mid = 4;
  4. $CATEGORY = cache_read('category-'.$mid.'.php');
  5. $MOD = cache_read('module-'.$mid.'.php');
  6. $NUM = count($CATEGORY);
  7. $catid = isset($catid) ? intval($catid) : 0;
  8. $do = new category($mid, $catid);
  9. $parentid = isset($parentid) ? intval($parentid) : 0;
  10. $table = $DT_PRE.'category';
  11. $menus = array (
  12.     array('添加分类', '?file='.$file.'&action=add&mid='.$mid.'&parentid='.$parentid),
  13.     array('管理分类', '?file='.$file.'&mid='.$mid),
  14.     array('分类复制', '?file='.$file.'&action=copy&mid='.$mid),
  15.     array('更新缓存', '?file='.$file.'&action=caches&mid='.$mid),
  16.     array('更新地址', '?file='.$file.'&action=url&mid='.$mid),
  17.     array('更新统计', '?file='.$file.'&action=count&mid='.$mid),
  18.     array('批量索引', '?file='.$file.'&action=letters&mid='.$mid),
  19. <font color="#ff0000">    array('批量拼音目录', '?file='.$file.'&action=allletter&mid='.$mid),</font>
  20. );
  21. if(strpos($forward, 'category') === false) $forward = '?file='.$file.'&mid='.$mid.'&parentid='.$parentid.'&kw='.urlencode($kw);
  22. switch($action) {
  23.     case 'add':
  24.         if($submit) {
  25.             if(!$category['catname']) msg('分类名不能为空');
  26.             $category['catname'] = trim($category['catname']);
  27.             $childs = '';
  28.             $catids = array();
  29.             if(strpos($category['catname'], "\n") === false) {
  30.                 $category['catdir'] = $do->get_catdir($category['catdir']);
  31.                 $do->add($category);
  32.                 $childs .= ','.$do->catid;
  33.                 $catids[] = $do->catid;
  34.             } else {
  35.                 $catnames = explode("\n", $category['catname']);
  36.                 foreach($catnames as $catname) {
  37.                     $catname = trim($catname);
  38.                     if(!$catname) continue;
  39.                     $category['catname'] = $catname;
  40.                     $category['catdir'] = '';
  41.                     $category['letter'] = '';
  42.                     $category['seo_title'] = '';
  43.                     $category['seo_keywords'] = '';
  44.                     $category['seo_description'] = '';
  45.                     $do->add($category);
  46.                     $childs .= ','.$do->catid;
  47.                     $catids[] = $do->catid;
  48.                 }
  49.             }
  50.             if($category['parentid']) {
  51.                 $parents = array();
  52.                 $cid = $category['parentid'];
  53.                 $parents[] = $cid;
  54.                 while(1) {
  55.                     if($CATEGORY[$cid]['parentid']) {
  56.                         $parents[] = $cid = $CATEGORY[$cid]['parentid'];
  57.                     } else {
  58.                         break;
  59.                     }
  60.                 }
  61.                 foreach($parents as $catid) {
  62.                     $arrchildid = $CATEGORY[$catid]['child'] ? $CATEGORY[$catid]['arrchildid'].$childs : $catid.$childs;
  63.                     $db->query("UPDATe {$table} SET child=1,arrchildid='$arrchildid' WHERe catid=$catid");
  64.                 }
  65.             }
  66.             foreach($catids as $catid) {
  67.                 $CATEGORY[$catid] = $db->get_one("SELECT * FROM {$table} WHERe catid=$catid");
  68.                 update_category($CATEGORY[$catid]);
  69.             }
  70.             $NUM > 500 ? $do->cache() : $do->repair();
  71.             dmsg('添加成功', '?file='.$file.'&mid='.$mid.'&parentid='.$category['parentid']);
  72.         } else {
  73.             include tpl('category_add');
  74.         }
  75.     break;
  76.     case 'edit':
  77.         $catid or msg();
  78.         if($submit) {
  79.             if(!$category['catname']) msg('分类名不能为空');
  80.             if($category['parentid'] == $catid) msg('上级分类不能与当前分类相同');
  81.             $do->edit($category);
  82.             $category['catid'] = $catid;
  83.             update_category($category);
  84.             $NUM > 500 ? $do->cache() : $do->repair();
  85.             dmsg('修改成功', '?file='.$file.'&mid='.$mid.'&parentid='.$category['parentid']);
  86.         } else {
  87.             extract($db->get_one("SELECT * FROM {$table} WHERe catid=$catid"));
  88.             include tpl('category_edit');
  89.         }
  90.     break;
  91.     case 'copy':
  92.         if($submit) {
  93.             if(!$fromid) msg('源模块ID不能为空');
  94.             if(!$save) $db->query("DELETe FROM {$table} WHERe moduleid=$mid");
  95.             $result = $db->query("SELECt * FROM {$table} WHERe moduleid=$fromid ORDER BY catid");
  96.             $O = $R = array();
  97.             while($r = $db->fetch_array($result)) {
  98.                 $O[$r['catid']] = $r['catname'];
  99.                 $sqlk = $sqlv = '';
  100.                 $catid = $r['catid'];
  101.                 unset($r['catid']);
  102.                 $r['moduleid'] = $mid;
  103.                 $r['item'] = $r['property'] = 0;
  104.                 $r = daddslashes($r);
  105.                 foreach($r as $k=>$v) {
  106.                     $sqlk .= ','.$k; $sqlv .= ",'$v'";
  107.                 }
  108.                 $sqlk = substr($sqlk, 1);
  109.                 $sqlv = substr($sqlv, 1);
  110.                 $db->query("INSERT INTO {$table} ($sqlk) VALUES ($sqlv)");
  111.                 $R[$catid] = $db->insert_id();
  112.             }
  113.             $result = $db->query("SELECt * FROM {$table} WHERe moduleid='$mid' ORDER BY catid");
  114.             while($r = $db->fetch_array($result)) {
  115.                 $catid = $r['catid'];
  116.                 $v = $r['parentid'];
  117.                 $parentid = isset($R[$v]) ? $R[$v] : $v;
  118.                 $arrparentid = explode(',', $r['arrparentid']);
  119.                 foreach($arrparentid as $k=>$v) {
  120.                     if(isset($R[$v])) $arrparentid[$k] = $R[$v];
  121.                 }
  122.                 $arrparentid = implode(',', $arrparentid);
  123.                 $arrchildid = explode(',', $r['arrchildid']);
  124.                 foreach($arrchildid as $k=>$v) {
  125.                     if(isset($R[$v])) $arrchildid[$k] = $R[$v];
  126.                 }
  127.                 $arrchildid = implode(',', $arrchildid);
  128.                 $db->query("UPDATe {$table} SET parentid='$parentid',arrparentid='$arrparentid',arrchildid='$arrchildid' WHERe catid=$catid");
  129.             }
  130.             $do->repair();
  131.             msg('分类复制成功', '?file='.$file.'&action=url&&mid='.$mid.'&forward='.urlencode('?file='.$file.'&mid='.$mid));
  132.         } else {
  133.             include tpl('category_copy');
  134.         }
  135.     break;
  136.     case 'caches':
  137.         msg('开始更新统计', "?file=$file&mid=$mid&action=count");
  138.     break;
  139.     case 'count':
  140.         require DT_ROOT.'/include/module.func.php';
  141.         $tb = get_table($mid);
  142.         if($MODULE[$mid]['module'] == 'club') $tb = $DT_PRE.'club_group_'.$mid;
  143.         if(!isset($num)) {
  144.             $num = 50;
  145.         }
  146.         if(!isset($fid)) {
  147.             $r = $db->get_one("SELECT MIN(catid) AS fid FROM {$table} WHERe moduleid=$mid");
  148.             $fid = $r['fid'] ? $r['fid'] : 0;
  149.         }
  150.         isset($sid) or $sid = $fid;
  151.         if(!isset($tid)) {
  152.             $r = $db->get_one("SELECt MAX(catid) AS tid FROM {$table} WHERe moduleid=$mid");
  153.             $tid = $r['tid'] ? $r['tid'] : 0;
  154.         }
  155.         if($fid <= $tid) {
  156.             $result = $db->query("SELECt catid FROM {$table} WHERe moduleid=$mid AND catid>=$fid ORDER BY catid LIMIT 0,$num");
  157.             if($db->affected_rows($result)) {
  158.                 while($r = $db->fetch_array($result)) {
  159.                     $catid = $r['catid'];                  
  160.                     if($mid == 4) {
  161.                         $condition = "groupid>5 and catids like '%,".$catid.",%'";
  162.                     } else {
  163.                         $condition = 'status=3';
  164.                         $condition .= $CATEGORY[$catid]['child'] ? " AND catid IN (".$CATEGORY[$catid]['arrchildid'].")" : " AND catid=$catid";
  165.                     }
  166.                     $item = $db->count($tb, $condition);
  167.                     $db->query("UPDATe {$table} SET item=$item WHERe catid=$catid");
  168.                 }
  169.                 $catid += 1;
  170.             } else {
  171.                 $catid = $fid + $num;
  172.             }
  173.         } else {
  174.             msg('统计更新成功', "?file=$file&mid=$mid&action=url");
  175.         }
  176.         msg('ID从'.$fid.'至'.($catid-1).'更新成功'.progress($sid, $fid, $tid), "?file=$file&mid=$mid&action=$action&sid=$sid&fid=$catid&tid=$tid&num=$num");
  177.     break;
  178.     case 'url':
  179.         foreach($CATEGORY as $c) {
  180.             update_category($c);
  181.         }
  182.         msg('地址更新成功', "?file=$file&mid=$mid&action=letters");
  183.     break;
  184.     case 'letters':
  185.         $update = false;
  186.         foreach($CATEGORY as $k=>$v) {
  187.             if(strlen($v['letter']) != 1) {
  188.                 $letter = $do->get_letter($v['catname'], false);
  189.                 if($letter) {
  190.                     $update = true;
  191.                     $letter = substr($letter, 0, 1);
  192.                     $db->query("UPDATE {$table} SET letter='$letter' WHERe catid='$v[catid]'");
  193.                 }
  194.             }
  195.         }
  196.         msg('索引修复成功', "?file=$file&mid=$mid&action=cache");
  197.     break;
  198.     case 'cache':
  199.         $do->repair();
  200.         dmsg('缓存更新成功', '?file='.$file.'&mid='.$mid);
  201.     break;
  202.     case 'delete':
  203.         if($catid) $catids = $catid;
  204.         $catids or msg('请选择分类');
  205.         $do->delete($catids);
  206.         $NUM > 500 ? $do->cache() : $do->repair();
  207.         dmsg('删除成功', $forward);
  208.     break;
  209.     case 'update':
  210.         if(!$category || !is_array($category)) msg();
  211.         $do->update($category);
  212.         foreach($category as $catid=>$v) {
  213.             $CATEGORY[$catid] = $db->get_one("SELECT * FROM {$table} WHERe catid=$catid");
  214.             update_category($CATEGORY[$catid]);
  215.         }      
  216.         $NUM > 500 ? $do->cache() : $do->repair();
  217.         dmsg('更新成功', '?file='.$file.'&mid='.$mid.'&parentid='.$parentid);
  218.     break;
  219.     case 'letter':
  220.         isset($catname) or $catname = '';
  221.         if(!$catname || strpos($catname, "\n") !== false) exit('');
  222.         exit($do->get_letter($catname, false));
  223.     break;
  224.     case 'ckdir':
  225.         if($do->get_catdir($catdir)) {
  226.             dialog('目录名可以使用');
  227.         } else {
  228.             dialog('目录名不合法或者已经被使用');
  229.         }
  230.     break;
  231. <font color="#ff0000">    //20180603 S
  232.     case 'allletter':
  233.         $q=$db->query("select * from  {$table} where moduleid='$mid'");
  234.         while($rs=$db->fetch_array($q)){
  235.         $lets = $do->get_letter($rs['catname'],false);
  236.         DB::query("UPDATe {$table} SET catdir='$lets' WHERe catid='$rs[catid]'");
  237.        }
  238.        dmsg('拼音目录修复成功', $forward);
  239.     break;
  240.     //20180603 E</font>
  241.     default:
  242.         $total = 0;
  243.         $DTCAT = array();
  244.         $condition = "moduleid=$mid";
  245.         $condition .= $keyword ? " AND catname LIKE '%$keyword%'" : " AND parentid=$parentid";
  246.         $result = $db->query("SELECT * FROM {$table} WHERe $condition ORDER BY listorder,catid");
  247.         while($r = $db->fetch_array($result)) {
  248.             $r['childs'] = substr_count($r['arrchildid'], ',');
  249.             $total += $r['item'];
  250.             $DTCAT[$r['catid']] = $r;
  251.         }
  252.         if(!$DTCAT && !$parentid && !$keyword) msg('暂无分类,请先添加',  '?file='.$file.'&mid='.$mid.'&action=add&parentid='.$parentid);
  253.         include tpl('category');
  254.     break;
  255. }

  256. class category {
  257.     var $moduleid;
  258.     var $catid;
  259.     var $category = array();
  260.     var $table;

  261.     function __construct($moduleid = 1, $catid = 0) {
  262.         global $CATEGORY;
  263.         $this->moduleid = $moduleid;
  264.         $this->catid = $catid;
  265.         if(!isset($CATEGORY)) $CATEGORY = cache_read('category-'.$this->moduleid.'.php');
  266.         $this->category = $CATEGORY;
  267.         $this->table = DT_PRE.'category';
  268.     }

  269.     function category($moduleid = 1, $catid = 0) {
  270.         $this->__construct($moduleid, $catid);
  271.     }

  272.     function add($category) {
  273.         $category['moduleid'] = $this->moduleid;
  274.         $category['letter'] = preg_match("/^[a-z]{1}+$/i", $category['letter']) ? strtolower($category['letter']) : '';
  275.         foreach(array('group_list',  'group_show',  'group_add') as $v) {
  276.             $category[$v] = isset($category[$v]) ? implode(',', $category[$v]) : '';
  277.         }
  278.         $sqlk = $sqlv = '';
  279.         foreach($category as $k=>$v) {
  280.             $sqlk .= ','.$k; $sqlv .= ",'$v'";
  281.         }
  282.         $sqlk = substr($sqlk, 1);
  283.         $sqlv = substr($sqlv, 1);
  284.         DB::query("INSERT INTO {$this->table} ($sqlk) VALUES ($sqlv)");     
  285.         $this->catid = DB::insert_id();
  286.         if($category['parentid']) {
  287.             $category['catid'] = $this->catid;
  288.             $this->category[$this->catid] = $category;
  289.             $arrparentid = $this->get_arrparentid($this->catid, $this->category);
  290.         } else {
  291.             $arrparentid = 0;
  292.         }
  293.         $catdir = $category['catdir'] ? $category['catdir'] : $this->catid;
  294.         DB::query("UPDATe {$this->table} SET listorder=$this->catid,catdir='$catdir',arrparentid='$arrparentid' WHERe catid=$this->catid");
  295.         return true;
  296.     }

  297.     function edit($category) {
  298.         $category['letter'] = preg_match("/^[a-z]{1}+$/i", $category['letter']) ? strtolower($category['letter']) : '';
  299.         if($category['parentid']) {
  300.             $category['catid'] = $this->catid;
  301.             $this->category[$this->catid] = $category;
  302.             $category['arrparentid'] = $this->get_arrparentid($this->catid, $this->category);
  303.         } else {
  304.             $category['arrparentid'] = 0;
  305.         }
  306.         foreach(array('group_list',  'group_show',  'group_add') as $v) {
  307.             $category[$v] = isset($category[$v]) ? implode(',', $category[$v]) : '';
  308.         }
  309.         $category['linkurl'] = '';
  310.         $sql = '';
  311.         foreach($category as $k=>$v) {
  312.             $sql .= ",$k='$v'";
  313.         }
  314.         $sql = substr($sql, 1);
  315.         DB::query("UPDATE {$this->table} SET $sql WHERe catid=$this->catid");
  316.         return true;
  317.     }

  318.     function delete($catids) {
  319.         if(is_array($catids)) {
  320.             foreach($catids as $catid) {
  321.                 if(isset($this->category[$catid])) $this->delete($catid);
  322.             }
  323.         } else {
  324.             $catid = $catids;
  325.             if(isset($this->category[$catid])) {
  326.                 DB::query("DELETE FROM {$this->table} WHERe catid=$catid");
  327.                 $arrchildid = $this->category[$catid]['arrchildid'] ? $this->category[$catid]['arrchildid'] : $catid;
  328.                 DB::query("DELETe FROM {$this->table} WHERe catid IN ($arrchildid)");           
  329.                 if($this->moduleid > 4) DB::query("UPDATe ".get_table($this->moduleid)." SET status=0 WHERe catid IN (".$arrchildid.")");
  330.             }
  331.         }
  332.         return true;
  333.     }

  334.     function update($category) {
  335.         if(!is_array($category)) return false;
  336.         foreach($category as $k=>$v) {
  337.             if(!$v['catname']) continue;
  338.             $v['parentid'] = intval($v['parentid']);
  339.             if($k == $v['parentid']) continue;
  340.             if($v['parentid'] > 0 && !isset($this->category[$v['parentid']])) continue;
  341.             $v['listorder'] = intval($v['listorder']);
  342.             $v['level'] = intval($v['level']);
  343.             $v['letter'] = preg_match("/^[a-z0-9]{1}+$/i", $v['letter']) ? strtolower($v['letter']) : '';
  344.             $v['catdir'] = $this->get_catdir($v['catdir'], $k);
  345.             if(!$v['catdir']) $v['catdir'] = $k;
  346.             DB::query("UPDATE {$this->table} SET catname='$v[catname]',parentid='$v[parentid]',listorder='$v[listorder]',style='$v[style]',level='$v[level]',letter='$v[letter]',catdir='$v[catdir]' WHERe catid=$k ");
  347.         }
  348.         return true;
  349.     }

  350.     function repair() {
  351.         $query = DB::query("SELECT * FROM {$this->table} WHERe moduleid='$this->moduleid' ORDER BY listorder,catid");
  352.         $CATEGORY = array();
  353.         while($r = DB::fetch_array($query)) {
  354.             $CATEGORY[$r['catid']] = $r;
  355.         }
  356.         $childs = array();
  357.         foreach($CATEGORY as $catid => $category) {
  358.             $CATEGORY[$catid]['arrparentid'] = $arrparentid = $this->get_arrparentid($catid, $CATEGORY);
  359.             $CATEGORY[$catid]['catdir'] = $catdir = preg_match("/^[0-9a-z_\-\/]+$/i", $category['catdir']) ? $category['catdir'] : $catid;
  360.             $sql = "catdir='$catdir',arrparentid='$arrparentid'";
  361.             if(!$category['linkurl']) {
  362.                 $CATEGORY[$catid]['linkurl'] = listurl($category);
  363.                 $sql .= ",linkurl='$category[linkurl]'";
  364.             }
  365.             DB::query("UPDATe {$this->table} SET $sql WHERe catid=$catid");
  366.             if($arrparentid) {
  367.                 $arr = explode(',', $arrparentid);
  368.                 foreach($arr as $a) {
  369.                     if($a == 0) continue;
  370.                     isset($childs[$a]) or $childs[$a] = '';
  371.                     $childs[$a] .= ','.$catid;
  372.                 }
  373.             }
  374.         }
  375.         foreach($CATEGORY as $catid => $category) {
  376.             if(isset($childs[$catid])) {
  377.                 $CATEGORY[$catid]['arrchildid'] = $arrchildid = $catid.$childs[$catid];
  378.                 $CATEGORY[$catid]['child'] = 1;
  379.                 DB::query("UPDATE {$this->table} SET arrchildid='$arrchildid',child=1 WHERe catid='$catid'");
  380.             } else {
  381.                 $CATEGORY[$catid]['arrchildid'] = $catid;
  382.                 $CATEGORY[$catid]['child'] = 0;
  383.                 DB::query("UPDATE {$this->table} SET arrchildid='$catid',child=0 WHERe catid='$catid'");
  384.             }
  385.         }
  386.         $this->cache($CATEGORY);
  387.         return true;
  388.     }

  389.     function get_arrparentid($catid, $CATEGORY) {
  390.         if($CATEGORY[$catid]['parentid'] && $CATEGORY[$catid]['parentid'] != $catid) {
  391.             $parents = array();
  392.             $cid = $catid;
  393.             while($catid) {
  394.                 if($CATEGORY[$cid]['parentid']) {
  395.                     $parents[] = $cid = $CATEGORY[$cid]['parentid'];
  396.                 } else {
  397.                     break;
  398.                 }
  399.             }
  400.             $parents[] = 0;
  401.             return implode(',', array_reverse($parents));
  402.         } else {
  403.             return '0';
  404.         }
  405.     }

  406.     function get_arrchildid($catid, $CATEGORY) {
  407.         $arrchildid = '';
  408.         foreach($CATEGORY as $category) {
  409.             if(strpos(','.$category['arrparentid'].',', ','.$catid.',') !== false) $arrchildid .= ','.$category['catid'];
  410.         }
  411.         return $arrchildid ? $catid.$arrchildid : $catid;
  412.     }

  413.     function get_catdir($catdir, $catid = 0) {
  414.         if(preg_match("/^[0-9a-z_\-\/]+$/i", $catdir)) {
  415.             $condition = "catdir='$catdir' AND moduleid='$this->moduleid'";
  416.             if($catid) $condition .= " AND catid!=$catid";
  417.             $r = DB::get_one("SELECT catid FROM {$this->table} WHERe $condition");
  418.             if($r) {
  419.                 return '';
  420.             } else {
  421.                 return $catdir;
  422.             }
  423.         } else {
  424.             return '';
  425.         }
  426.     }

  427.     function get_letter($catname, $letter = true) {
  428.         return $letter ? strtolower(substr(gb2py($catname), 0, 1)) : str_replace(' ', '', gb2py($catname));
  429.     }

  430.     function cache($data = array()) {
  431.         cache_category($this->moduleid, $data);
  432.     }
  433. }
  434. ?>
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|知识学习 ( 鲁ICP备20015483号 )

GMT+8, 2026-5-13 21:57 , Processed in 0.122129 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表