typeid
的栏目数据,可以在标签中使用 not in
。具体方法如下:,,“php,{dede:channelartlist typeid='notin(1,2,3)'},,{/dede:channelartlist},
`,,
1,2,3 是你想要排除的
typeid` 列表,用逗号分隔。在织梦CMS(DedeCMS)中,dede:channelartlist
标签是一个非常常用的标签,用于调用文章列表,有时候我们需要排除某些指定的栏目数据,比如根据typeid
来排除一些不需要的栏目,本文将详细讲解如何使用dede:channelartlist
标签来调用排除指定typeid
栏目数据的方法。
基础语法
我们来看一下dede:channelartlist
标签的基础语法:
{dede:channelartlist typeid='栏目ID'} <! 这里是要显示的内容 > <a href='[field:arcurl/]'>[field:title/]</a> {/dede:channelartlist}
在这个基础语法中,typeid
属性是用来指定栏目 ID 的,我们可以使用这个属性来调用特定栏目的文章列表,如果我们想要排除某些特定的栏目,就需要使用一些额外的方法。
排除指定typeid
栏目数据的方法
为了排除特定的typeid
,我们可以利用 DedeCMS 提供的自定义标签功能,结合 SQL 查询来实现,以下是一个详细的步骤和示例代码:
1. 创建自定义标签
我们需要创建一个自定义标签来执行 SQL 查询,假设我们要排除typeid=5
和typeid=7
的栏目数据,可以按照以下步骤操作:
1、登录到 DedeCMS 后台管理界面。
2、进入“模板管理” > “标签管理”。
3、新建一个自定义标签,名称可以叫做my_custom_list
,类型选择“自定义函数”。
4、在函数内容中编写如下代码:
global $dsql; $typeids = '5,7'; // 这里填写你要排除的typeid,用逗号分隔 $excludeSql = ''; if (!empty($typeids)) { $excludeSql = " AND ("; foreach (explode(',', $typeids) as $tid) { $excludeSql .= " typeid != {$tid} AND "; } $excludeSql = rtrim($excludeSql, " AND "); $excludeSql .= ")"; } // 获取当前栏目ID $currentTypeId = @me['typeid']; if (empty($currentTypeId)) { ShowMsg('请选择一个栏目!', '1'); exit(); } $row = $dsql>GetOne("SELECT * FROM dede_archives WHERE typeid = '{$currentTypeId}' {$excludeSql} ORDER BY id DESC"); while ($row = $dsql>GetObject('SELECT * FROM dede_archives WHERE typeid = ' . $currentTypeId . ' ' . $excludeSql . ' ORDER BY id DESC')) { echo '<li><a href="' . $row['arcurl'] . '">' . $row['title'] . '</a></li>'; }
5、保存并生成自定义标签。
2. 使用自定义标签
创建好自定义标签后,我们就可以在模板中使用它了,以下是如何在模板中调用自定义标签的示例:
{dede:my_custom_list} {/dede:my_custom_list}
通过这种方式,我们就成功实现了排除指定typeid
栏目数据的功能。
FAQs
Q1: 如果我想排除多个typeid
,如何修改代码?
A1: 你只需要修改自定义标签中的$typeids
变量,将需要排除的typeid
用逗号分隔开来即可。
$typeids = '5,7,9'; // 排除 typeid 为 5、7、9 的栏目
Q2: 除了排除typeid
,还可以排除其他字段吗?
A2: 是的,你可以根据需求修改 SQL 查询条件,排除其他字段,如果你还想排除某个特定作者的文章,可以在 SQL 查询中增加相应的条件:
$excludeAuthorId = '10'; // 排除作者ID为10的文章 $excludeSql = ''; if (!empty($typeids) || !empty($excludeAuthorId)) { $excludeSql = " AND ("; if (!empty($typeids)) { foreach (explode(',', $typeids) as $tid) { $excludeSql .= " typeid != {$tid} AND "; } } if (!empty($excludeAuthorId)) { $excludeSql .= " authorid != {$excludeAuthorId} AND "; } $excludeSql = rtrim($excludeSql, " AND "); $excludeSql .= ")"; }
通过以上方法,你可以轻松实现对不同字段的排除,灵活应对各种需求。
方法名称 | 参数说明 | 调用示例 | 说明 |
排除指定typeid | typeid: 指定要排除的栏目ID | 织梦dede:channelartlist typeid=5 | 5 代表排除ID为5的栏目数据 |
排除多个typeid | typeid: 以逗号分隔的多个栏目ID | 织梦dede:channelartlist typeid=5,10 | 5,10 代表排除ID为5和10的栏目数据 |
排除所有typeid | typeid: 使用0 表示排除所有栏目数据 | 织梦dede:channelartlist typeid=0 | 0 代表排除所有栏目数据 |
排除部分typeid | typeid: 使用 符号开头,后跟栏目ID | 织梦dede:channelartlist typeid=5,10 | 5,10 代表排除ID为5和10的栏目数据,但其他栏目正常显示 |
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1186207.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复