我们平时调用指定栏目列表的时候,channel标签虽然能调用栏目列表,但是不能调用指定的某些栏目栏目,所以我们一般用dede:channelartlist标签来实现,然后指定typeid属性来调用多个栏目,用逗号“,”分隔。
但是调用指定栏目的时候,都是用的后台栏目指定的排序方式,但是只需要修改一小点东西,就可以实现按我们指定的typeid顺序进行排序。方法如下:
打开/include/taglib/channelartlist.lib.php, 找到$dsql->SetQuery("SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `idea_arctype` WHERE $tpsql ORDER BY sortrank ASC LIMIT $totalnum"); 处,修改成:
$zhaiming='';
if(preg_match('#,#', $typeid) && ($orderby == 'typeid')) {
$zhaiming= "ORDER BY substring_index( '$typeid',id,1) ";
} else {
$zhaiming= ' ORDER BY sortrank ASC ';}
$dsql->SetQuery("SELECT id,typename,futypename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
FROM `#@__arctype` WHERE $tpsql $zhaiming LIMIT $totalnum");
测试代码
1 |
{dede:channelartlist typeid='1,2,3,4,5'} |
2 |
{dede:field.typename/}<br/> |
3 |
{/dede:channelartlist} |
4 |
-------------------------------------------<br/> |
5 |
{dede:channelartlist typeid='4,5,2,1,3' orderby='typeid'} |
6 |
{dede:field.typename/}<br/> |
7 |
{/dede:channelartlist} |
