html,{dede:arclist typeid='1,2,3' notypeid='4,5,6'},
`,,
typeid属性用于指定要显示的文章类型ID,
notypeid属性用于指定不显示的文章类型ID。这样,在生成的列表中,只会显示
typeid指定的文章类型,而不会显示
notypeid`指定的文章类型。在织梦CMS(DedeCMS)中,arclist
标签是一个功能强大的标签,用于获取文章列表,有时候我们需要对栏目进行过滤,只显示特定类型的文章,为了实现这一目标,我们可以为arclist
标签增加一个自定义属性notypeid
,用于排除指定ID的栏目类型。
1. 修改核心文件
要实现这个功能,首先需要修改DedeCMS的核心文件,找到include/arc.archives.class.php
文件,并打开它。
2. 添加自定义属性
在arc.archives.class.php
文件中,找到ParseTag
方法,并在其中添加对notypeid
属性的处理逻辑,具体代码如下:
// 解析notypeid属性 if (isset($tag['notypeid'])) { $this>notypeid = explode(',', $tag['notypeid']); // 将逗号分隔的字符串转换为数组 }
3. 修改SQL查询语句
需要在生成SQL查询语句的地方加入对notypeid
的判断,找到GetSearchSql
方法,并在其中修改SQL查询语句:
$sql = "SELECT id, mid, typeid, ... FROM#@__archives
WHERE 1 ";
if (!empty($this>channelType)) {
$sql .= "AND typeid IN(" . $this>channelType . ") ";
}
if (!empty($this>notypeid)) {
$tempTypeids = array_diff($this>channelTypeArr, $this>notypeid); // 排除notypeid指定的栏目类型
$sql .= "AND typeid IN(" . implode(',', $tempTypeids) . ") ";
}
...
4. 保存修改并测试
保存对arc.archives.class.php
文件的修改,然后更新缓存,你可以在模板中使用带有notypeid
属性的arclist
标签来实现栏目过滤功能。
{dede:arclist notypeid="1,2" row="10" titlelen="50"} <a href="[field:arcurl/]">[field:title function="htmlspecialchars"/]</a> {/dede:arclist}
在这个例子中,arclist
标签将排除ID为1和2的栏目类型。
FAQs
Q1: 如何确保修改后的文件生效?
A1: 确保在后台清除缓存,如果仍然不生效,请检查是否有其他缓存机制(如CDN或服务器缓存)影响了结果。
Q2: 如果需要排除多个栏目类型,如何设置notypeid
属性?
A2:notypeid
属性支持逗号分隔的多个ID值。notypeid="1,2,3"
表示排除ID为1、2和3的栏目类型。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1099604.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复