要排除指定
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'}
[field:title/]
{/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 '
' . $row['title'] . '';
}
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的栏目数据,但其他栏目正常显示 |