织梦cms栏目批量操作

批量操作概述

当网站拥有大量栏目时,逐一手动管理效率极低。织梦CMS提供了多种栏目批量操作的方式,包括批量删除、批量更新缓存、批量修改属性、批量生成HTML等,能显著提升管理员的工作效率。

一、后台界面的批量操作

核心 > 栏目管理 中,织梦后台提供了以下批量操作功能:

二、通过SQL批量修改栏目属性

数据库操作是实现批量修改最直接的方式:

-- 批量修改栏目模板
UPDATE dede_arctype 
SET templist='{style}/list_article.htm', 
    temparticle='{style}/article_article.htm' 
WHERE reid=0;

-- 批量设置栏目为隐藏状态
UPDATE dede_arctype SET ishidden=1 
WHERE id IN(5,8,12,15,20);

-- 批量修改栏目目录名
UPDATE dede_arctype 
SET typedir=REPLACE(typedir, '{cmspath}/old/', '{cmspath}/new/') 
WHERE typedir LIKE '{cmspath}/old/%';

-- 批量设置SEO关键词
UPDATE dede_arctype 
SET keywords=CONCAT(typename, ',织梦CMS,网站建设') 
WHERE reid=0;

三、批量修改栏目名称

-- 在栏目名称前批量添加前缀
UPDATE dede_arctype 
SET typename=CONCAT('【推荐】', typename) 
WHERE id IN(3,5,8,10);

-- 批量替换栏目名称中的文字
UPDATE dede_arctype 
SET typename=REPLACE(typename, '旧名称', '新名称') 
WHERE typename LIKE '%旧名称%';

四、批量删除栏目及关联数据

-- 1. 备份数据
CREATE TABLE dede_arctype_backup AS SELECT * FROM dede_arctype;
CREATE TABLE dede_archives_backup AS SELECT * FROM dede_archives;

-- 2. 删除指定栏目
DELETE FROM dede_arctype WHERE id IN(15,16,17);
DELETE FROM dede_arctype WHERE topid IN(15,16,17); -- 删除子栏目

-- 3. 删除栏目下的文章
DELETE FROM dede_archives WHERE typeid IN(15,16,17);

-- 4. 清理附加表数据(示意图,需根据模型调整)
DELETE FROM dede_addonarticle WHERE aid IN(
  SELECT id FROM dede_archives WHERE typeid IN(15,16,17)
);
危险操作:直接使用DELETE语句删除数据前,务必先用SELECT确认要删除的数据范围,并做好数据库备份。建议先在测试环境验证SQL语句的正确性。

五、批量调整栏目排序

-- 将指定栏目的sortrank设为按ID顺序
UPDATE dede_arctype SET sortrank=id * 10 WHERE reid=0;

-- 批量将子栏目排在父栏目之后
UPDATE dede_arctype a1 
SET a1.sortrank=(
  SELECT base_rank FROM (
    SELECT id * 100 + 1 AS base_rank FROM dede_arctype WHERE reid=0
  ) AS tmp 
) 
WHERE a1.reid > 0;

六、使用PHP脚本进行复杂批量操作

当SQL无法满足需求时,可编写PHP脚本来执行复杂逻辑:

<?php
require_once(dirname(__FILE__)."/include/common.inc.php");

// 批量设置栏目属性
$dsql->SetQuery("SELECT id,typename FROM dede_arctype WHERE reid=0");
$dsql->Execute();
while($row=$dsql->GetArray()){
    $sql="UPDATE dede_arctype 
            SET seotitle='{$row['typename']}_织梦CMS教学', 
                keywords='{$row['typename']},织梦,CMS,教程' 
            WHERE id={$row['id']}";
    $dsql->ExecuteNoneQuery($sql);
    echo "栏目 {$row['typename']} 更新完成
"; } echo "全部批量操作完成!"; ?>

七、批量生成栏目HTML脚本

<?php
// 批量生成所有栏目的HTML
require_once(dirname(__FILE__)."/include/common.inc.php");
require_once(DEDEINC."/arc.listview.class.php");

$dsql->SetQuery("SELECT id,typename,typedir FROM dede_arctype WHERE ishidden=0");
$dsql->Execute();
while($row=$dsql->GetArray()){
    $lv=new ListView($row['id']);
    $lv->CountRecord();
    $lv->MakeHtml();
    echo "栏目【{$row['typename']}】HTML生成完成
"; } ?>
效率建议:批量操作前先估算操作的影响范围。对于超大型网站(10万+数据),建议在服务器低峰期执行批量操作,必要时可分批处理,每批100-500条数据,避免长时间锁表。