知识学习

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

升级   100%

152

主题

0

回帖

752

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
752
发表于 2020-9-15 23:50:14 | 显示全部楼层 |阅读模式
用于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.     array('批量拼音目录', '?file='.$file.'&action=allletter&mid='.$mid),
  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.         //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
  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:59 , Processed in 0.135143 second(s), 25 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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