织梦CMS调用栏目所有子栏目文章的方案
在实际开发中,经常需要在一个页面中汇总展示某个顶级栏目下所有子栏目的文章。CHANNELARTLIST标签是实现这一需求的最佳选择。
一、使用channelartlist实现
{dede:channelartlist typeid='1' row='10'}
<div>
<h3><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h3>
{dede:arclist row='5' titlelen='40'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</div>
{/dede:channelartlist}
channelartlist自动遍历指定父栏目下的所有子栏目,在内部使用arclist获取每个子栏目的文章。
二、用SQL获取所有子栏目的文章
{dede:sql sql="SELECT a.id,a.title,a.description FROM dede_archives a LEFT JOIN dede_arctype t ON a.typeid=t.id WHERE t.topid=1 ORDER BY a.pubdate DESC LIMIT 20"}
<li><a href="/plus/view.php?aid=[field:id/]">[field:title/]</a></li>
{/dede:sql}
三、使用PHP遍历子栏目并获取文章
{dede:php}
$sql="SELECT id FROM dede_arctype WHERE reid=1";
$dsql->Execute('sub',$sql);
while($row=$dsql->GetArray('sub')){
$dsql->SetQuery("SELECT id,title FROM dede_archives WHERE typeid=".$row['id']." LIMIT 5");
$dsql->Execute('arc');
while($arc=$dsql->GetArray('arc')){
echo '<li>'.$arc['title'].'</li>';
}}
{/dede:php}
提示:channelartlist是最简单的方式,但如果子栏目很多(超过20个),建议使用SQL方式减少数据库查询次数。