找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1070|回复: 0

[分享] 让dede的channelartlist标签支持limit

[复制链接]
发表于 2018-2-25 09:21:33 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
当使用 channelartlist标签 嵌套artlist 标签时,想要各个子栏目的样式不一样,或者指定调用某几个子栏目,比如调用当前栏目的第四个第八个栏目,使用row肯定不行,这时我们想到artlist支持limit调用,但是channelartlist不支持。
临时想个法子 在channelartlist加个limit标签
修改 \include\taglib\channelartlist.lib.php 文件标签代码如下
  1. <?php if(!defined('DEDEINC')) exit('Request Error!');
  2. /**
  3. * 获取当前频道的下级栏目的内容列表标签
  4. *
  5. * @version $Id: channelartlist.lib.php 1 9:29 2010年7月6日Z tianya $
  6. * @package DedeCMS.Taglib
  7. * @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
  8. * @license http://help.dedecms.com/usersguide/license.html
  9. * @link http://www.dedecms.com
  10. */

  11. /*>>dede>>
  12. <name>频道文档</name>
  13. <type>全局标记</type>
  14. <for>V55,V56,V57</for>
  15. <description>获取当前频道的下级栏目的内容列表标签</description>
  16. <demo>
  17. {dede:channelartlist row=6}
  18. <dl>
  19. <dt><a href='{dede:field name='typeurl'/}'>{dede:field name='typename'/}</a></dt>
  20. <dd>
  21. {dede:arclist titlelen='42' row='10'} <ul class='autod'>
  22. <li><a href="[field:arcurl /]">[field:title /]</a></li>
  23. <li>([field:pubdate function="MyDate('m-d',@me)"/])</li>
  24. </ul>
  25. {/dede:arclist}
  26. </dl>
  27. {/dede:channelartlist}
  28. </demo>
  29. <attributes>
  30. <iterm>typeid:频道ID</iterm>
  31. <iterm>row:获取的栏目返回值</iterm>
  32. </attributes>
  33. >>dede>>*/

  34. require_once(DEDEINC.'/arc.partview.class.php');

  35. function lib_channelartlist(&$ctag,&$refObj)
  36. {
  37. global $dsql,$envs,$_sys_globals;

  38. //处理标记属性、innertext
  39. $attlist = 'typeid|0,row|20,cacheid|,limit|,type|'; //这边加个limit变量 type 我是想实现 在子栏目下调用 同级子栏目的信息
  40. FillAttsDefault($ctag->CAttribute->Items,$attlist);
  41. extract($ctag->CAttribute->Items, EXTR_SKIP);
  42. $innertext = trim($ctag->GetInnerText());
  43. $artlist = '';
  44. //读取固定的缓存块
  45. $cacheid = trim($cacheid);
  46. if($cacheid !='') {
  47. $artlist = GetCacheBlock($cacheid);
  48. if($artlist!='') return $artlist;
  49. }

  50. if(empty($typeid))
  51. {
  52. $typeid = ( !empty($refObj->TypeLink->TypeInfos['id']) ? $refObj->TypeLink->TypeInfos['id'] : 0 );
  53. }


  54. if($innertext=='') $innertext = GetSysTemplets('part_channelartlist.htm');
  55. $totalnum = $row;
  56. if(empty($totalnum)) $totalnum = 20;

  57. //获得类别ID总数的信息
  58. $typeids = array();
  59. if($type=='reid') //2011.7.5 调用上级目录下的子栏目内容
  60. {

  61. $reid = $refObj->TypeLink->TypeInfos['reid'];


  62. $tpsql = " reid='$reid' AND ispart<>2 AND ishidden<>1 ";
  63. }
  64. else if($typeid==0 || $typeid=='top') {

  65. $tpsql = " reid=0 AND ispart<>2 AND ishidden<>1 AND channeltype>0 ";
  66. }
  67. else
  68. {

  69. if(!preg_match('#,#', $typeid)) {
  70. $tpsql = " reid='$typeid' AND ispart<>2 AND ishidden<>1 ";
  71. }
  72. else {
  73. $tpsql = " id IN($typeid) AND ispart<>2 AND ishidden<>1 ";
  74. }
  75. }


  76. $limit = trim(preg_replace('#limit#is', '', $limit)); //增加limit标签
  77. if($limit!='') $limitsql = " LIMIT $limit "; //如果limit为空就以 row变量的默认值 限制
  78. else $limitsql = " LIMIT 0,$totalnum";

  79. $dsql->SetQuery("SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
  80. FROM `dede_arctype` WHERE $tpsql ORDER BY sortrank ASC $limitsql");
  81. $dsql->Execute();
  82. while($row = $dsql->GetArray()) {
  83. $typeids[] = $row;
  84. }

  85. if(!isset($typeids[0])) return '';

  86. $GLOBALS['itemindex'] = 0;
  87. $GLOBALS['itemparity'] = 1;
  88. for($i=0;isset($typeids[$i]);$i++)
  89. {
  90. $GLOBALS['itemindex']++;
  91. $pv = new PartView($typeids[$i]['id']);
  92. $pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]);

  93. $pv->SetTemplet($innertext,'string');
  94. $artlist .= $pv->GetResult();
  95. $GLOBALS['itemparity'] = ($GLOBALS['itemparity']==1 ? 2 : 1);
  96. }
  97. //注销环境变量,以防止后续调用中被使用
  98. $GLOBALS['envs']['typeid'] = $_sys_globals['typeid'];
  99. $GLOBALS['envs']['reid'] = '';
  100. if($cacheid !='') {
  101. WriteCacheBlock($cacheid, $artlist);
  102. }
  103. return $artlist;
  104. }
复制代码


这样就可以实现了
在同一栏目分别调用
{dede:channelartlist limit='0,1'} 大栏目下 第一个子栏目
{dede:arclist row='6'}
{/dede:arclsit}
{/dede:channelartlist}

{dede:channelartlist limit='1,1'}大栏目下 第二个子栏目
{dede:arclist row='6'}
{/dede:arclsit}
{/dede:channelartlist}
上面就可以在一个模板中调用

如果在子栏目下 调用同级栏目的信息
{dede:channelartlist type='reid' limit='0,1'}
{dede:arclist row='6'}
{/dede:arclist}
{/dede:channelartlist}

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-11-30 15:32 , Processed in 0.040594 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表