织梦cms栏目内容过滤

栏目内容过滤概述

在织梦CMS的栏目列表页中,内容过滤是指根据特定条件筛选显示的文章,例如只显示推荐文章、排除某些属性的文章、按时间范围筛选等。通过标签属性和参数的组合,可以实现灵活的栏目内容筛选。

一、使用 flag 属性过滤

flag 参数用于筛选带有特定属性的文章:

<!-- 只显示推荐文章 -->
{dede:arclist typeid='3' flag='c' row='10'}

<!-- 只显示带缩略图的文章 -->
{dede:arclist typeid='3' flag='p' row='10'}

<!-- flag属性值说明 -->
h=头条(headline)
c=推荐(commend)
f=幻灯片(flash/slide)
a=特荐(grade A)
s=滚动(scroll)
b=加粗(bold)
p=有图片(picture)
j=跳转(jump)

二、使用 noflag 排除特定属性

<!-- 排除头条和跳转类文章 -->
{dede:arclist typeid='3' noflag='h,j' row='10'}

<!-- 只显示普通文章(排除所有特殊属性) -->
{dede:arclist typeid='3' noflag='h,c,f,a,s,b,p,j' row='10' titlelen='40'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}

三、按时间范围过滤

使用 subday 参数按天数过滤:

<!-- 只显示最近7天的文章 -->
{dede:arclist typeid='3' subday='7' row='10' orderby='pubdate'}

<!-- 只显示最近30天的热门文章 -->
{dede:arclist typeid='3' subday='30' row='10' orderby='click'}

<!-- 显示30天前的历史文章(负值表示之前) -->
{dede:arclist typeid='3' subday='-365' row='10'}
<!-- 表示显示365天之前的文章 -->

四、SQL标签实现高级过滤

<!-- 过滤:点击量大于100且为推荐文章 -->
{dede:sql sql="SELECT * FROM dede_archives 
WHERE typeid=3 AND click > 100 AND flag LIKE '%c%' 
AND arcrank=0 
ORDER BY click DESC LIMIT 10"}
<li><a href="/plus/view.php?aid=[field:id/]">
  [field:title/]<span>[field:click/]次</span>
</a></li>
{/dede:sql}

五、按自定义字段过滤

使用自定义字段进行筛选(需配合addfields):

<!-- 过滤价格为0的产品 -->
{dede:sql sql="SELECT a.id,a.title 
FROM dede_archives a 
LEFT JOIN dede_addonarticle ad ON a.id=ad.aid 
WHERE a.typeid=5 AND ad.product_price > 0 
ORDER BY ad.product_price ASC LIMIT 10"}
<li><a href="/plus/view.php?aid=[field:id/]">[field:title/]</a></li>
{/dede:sql}

六、栏目前台多条件筛选

在栏目列表页实现用户可操作的多条件筛选:

<!-- 前台筛选界面 -->
<form method="get" action="/plus/list.php">
  <input type="hidden" name="tid" value="{dede:field.id/}">
  
  <label><input type="radio" name="orderby" value="pubdate" checked> 最新</label>
  <label><input type="radio" name="orderby" value="click"> 最热</label>
  
  <label><input type="checkbox" name="flag" value="c"> 仅推荐</label>
  <label><input type="checkbox" name="flag" value="p"> 有图片</label>
  
  <button type="submit">筛选</button>
</form>

七、排除隐藏栏目和草稿

<!-- 只显示已审核的文章,排除草稿和回收站 -->
{dede:arclist typeid='3' row='10'}

<!-- arcrank值说明 -->
<!-- 0=已审核(正常) -1=待审核 -2=回收站 -->

<!-- SQL方式确保排除未审核文章 -->
{dede:sql sql="SELECT * FROM dede_archives 
WHERE typeid=3 AND arcrank=0 
ORDER BY pubdate DESC LIMIT 10"}
性能提示:在栏目列表页使用过多复杂的SQL过滤条件可能影响页面加载速度。建议利用织梦CMS的 arclist 内置参数进行过滤,这些参数经过了查询优化,效率高于自定义SQL。