Products
96SEO 2025-09-23 11:36 1
DedeCms是一款广泛使用的内容管理系统,arclist标签用于调用指定栏目的文章列表。只是 在实际应用中,很多站长遇到一个棘手问题:文章选择了副栏目后arclist标签无法正确调用这些文章。特别是当一篇文章被多个副栏目收录时arclist往往只显示主栏目下的内容,而忽略副栏目。
本文将详细讲解如何解决DedeCms中arclist标签无法调用副栏目文章的难题, 并提供可直接操作的代码修改方案,让你轻松实现多栏目的文档调用。
在DedeCms中,文档除主栏目外可以设置多个副栏目。系统默认查询时只检索主栏目的typeid字段,不会自动关联typeid2。导致使用标准的arclist标签时无法显示属于副栏目的文章。
具体表现:
DedeCms版本5.7 SP1及以上版本中, arclist标签的数据库查询条件逻辑写在文件:
/include/taglib/arclist.lib.php
大约在第295-296行左右,有如下代码段:
if
$orwheres = ' arc.typeid IN .')';
else
$orwheres = ' arc.typeid IN .','.$CrossID.')';
此处仅判断了主栏目的typeid,没有涉及typeid2的情况,也没有处理多重分类匹配,所以呢导致了无法显示选择了副栏目的文章。
思路解析:
// 原始代码
if
$orwheres = ' arc.typeid IN .')';
else
$orwheres = ' arc.typeid IN .','.$CrossID.')';
// 修改后代码
if {
$sonids = GetSonIds;
$orwheres = " OR arc.typeid2 IN OR CONCAT LIKE '%,$typeid,%') ";
} else {
$sonids = GetSonIds;
$crossids = $CrossID;
$orwheres = " OR arc.typeid2 IN OR CONCAT LIKE '%,$typeid,%' OR CONCAT LIKE '%,$crossids,%') ";
}
说明:
{dede:arclist type='text' row='10' typeid='12' orderby='pubdate' flag='' /}
{dede:arclist row='8' type='text' typeid='12' flag='' orderby='pubdate'}
- 发布时间:
{/dede:arclist}
*确保已经完成前述核心文件修正, 否则此处仍不会调出多重分类中的内容*
Dede官方模板通常在频道列表页、首页或者专题页通过{dede:arclist}实现动态内容调用。比方说 一个频道下既有主子栏目,又涉及多余的交叉版块,就可以这样写:
{dede:arclist row='10' type='text' typeid='$topTypeId$' crosspage='$crossPageId$' flag='' orderby='pubdate'}
&-&-&-&-&;
{/dede:arclist}
*其中 crosspage 或 CrossID 参数可用于传递额外事叉/附加分类ID,这样结合前面修正后的核心SQL即可实现准确的数据拉取。*
DedeCMS默认不支持通过 arclist 标签自动拉取选择了多个附加/副栏目的文档,是由于核心查询逻辑未涵盖对arc.typeid2字段以及模糊匹配逗号分隔值”的处理造成。在本教程中, 我们通过直接修改/include/taglib/arclist.lib.php核心程序,使得where条件增加对附加分类判定,从而完美解决此问题,实现灵活精准地按任意类别组合拉取相关文章功能。一边兼顾flag标记筛选保证功能完整性与稳定性。
Demand feedback