给织梦的dede:channel增加可选择范围的属性

需要调用一些指定ID几到几的一些栏目。刚开始打算直接将链接写死在模版里。后来觉得这样对程序的扩展性不是很好。客户是不懂程序的,你不能指望他也会修改模版。于是就有了做这样一个小功能的想法。      在原来的dede:channel基础上增加了一个limit属性。 limit是起点,row是条数

使用方法:

{dede:channel type='son' limit='3' typeid='1' reid='1' row='5' "<a href='~typelink~' class='thisclass'>~typename~</a> |"}        <a href="[field:typelink/]"><span class="aaa">[field:typename/]</span></a> {/dede:channel}

将一下的代码复制到include/taglib/channel.lib.php中进行覆盖:

[php]  view plain  copy
  1. function lib_channel(&$ctag,&$refObj)  
  2. {  
  3.     global $dsql;  
  4.    
  5.     $attlist = "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|,cacheid|,limit|0";  
  6.     FillAttsDefault($ctag->CAttribute->Items,$attlist);  
  7.     extract($ctag->CAttribute->Items, EXTR_SKIP);  
  8.     $innertext = $ctag->GetInnerText();  
  9.     $line = empty($row) ? 100 : $row;  
  10.    
  11.     $likeType = '';  
  12.     //读取固定的缓存块  
  13.     $cacheid = trim($cacheid);  
  14.     if($cacheid !='') {  
  15.         $likeType = GetCacheBlock($cacheid);  
  16.         if($likeType != ''return $likeType;  
  17.     }  
  18.    
  19.     $reid = 0;  
  20.     $topid = 0;  
  21.     //如果属性里没指定栏目id,从引用类里获取栏目信息  
  22.     if(empty($typeid))  
  23.     {  
  24.         if( isset($refObj->TypeLink->TypeInfos['id']) )  
  25.         {  
  26.             $typeid = $refObj->TypeLink->TypeInfos['id'];  
  27.             $reid = $refObj->TypeLink->TypeInfos['reid'];  
  28.             $topid = $refObj->TypeLink->TypeInfos['topid'];  
  29.         }  
  30.         else {  
  31.         $typeid = 0;  
  32.       }  
  33.     }  
  34.     //如果指定了栏目id,从数据库获取栏目信息  
  35.     else  
  36.     {  
  37.         $row2 = $dsql->GetOne("Select * From `#@__arctype` where id='$typeid' ");  
  38.         $typeid = $row2['id'];  
  39.         $reid = $row2['reid'];  
  40.         $topid = $row2['topid'];  
  41.         $issetInfos = true;  
  42.     }  
  43.    
  44.     if($type=='' || $type=='sun'$type='son';  
  45.     if($innertext==''$innertext = GetSysTemplets("channel_list.htm");  
  46.    
  47.     if($type=='top')  
  48.     {  
  49.         $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath  
  50.           From `#@__arctype` where reid=0 And ishidden<>1 order by sortrank asc limit $limit$line ";  
  51.     }  
  52.     else if($type=='son')  
  53.     {  
  54.         if($typeid==0) return '';  
  55.         $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath  
  56.           From `#@__arctype` where reid='$typeid' And ishidden<>1 order by sortrank asc limit $limit$line ";  
  57.     }  
  58.     else if($type=='self')  
  59.     {  
  60.         if($reid==0) return '';  
  61.         $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath  
  62.             From `#@__arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit $limit$line ";  
  63.     }  
  64.     //And id<>'$typeid'  
  65.     $needRel = false;  
  66.     $dtp2 = new DedeTagParse();  
  67.     $dtp2->SetNameSpace('field','[',']');  
  68.     $dtp2->LoadSource($innertext);  
  69.     //检查是否有子栏目,并返回rel提示(用于二级菜单)  
  70.     if(ereg(':rel'$innertext)) $needRel = true;  
  71.    
  72.     if(empty($sql)) return '';  
  73.     $dsql->SetQuery($sql);  
  74.     $dsql->Execute();  
  75.    
  76.     $totalRow = $dsql->GetTotalRow();  
  77.     //如果用子栏目模式,当没有子栏目时显示同级栏目  
  78.     if($type=='son' && $reid!=0 && $totalRow==0)  
  79.     {  
  80.         $sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath  
  81.             From `#@__arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit $limit$line ";  
  82.         $dsql->SetQuery($sql);  
  83.       $dsql->Execute();  
  84.     }  
  85.     $GLOBALS['autoindex'] = 0;  
  86.     for($i=0;$i < $line;$i++)  
  87.     {  
  88.         if($col>1) $likeType .= "<dl>\r\n";  
  89.         for($j=0; $j<$col$j++)  
  90.         {  
  91.             if($col>1) $likeType .= "<dd>\r\n";  
  92.             if($row=$dsql->GetArray())  
  93.             {  
  94.                 $row['sonids'] = $row['rel'] = '';  
  95.                 if($needRel)  
  96.                 {  
  97.                     $row['sonids'] = GetSonIds($row['id'], 0, false);  
  98.                     if($row['sonids']==''$row['rel'] = '';  
  99.                     else $row['rel'] = " rel='dropmenu{$row['id']}'";  
  100.                 }  
  101.                 //处理同级栏目中,当前栏目的样式  
  102.                 if( ($row['id']==$typeid || ($topid==$row['id'] && $type=='top') ) && $currentstyle!='' )  
  103.                 {  
  104.                     $linkOkstr = $currentstyle;  
  105.                     $row['typelink'] = GetOneTypeUrlA($row);  
  106.                     $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);  
  107.                     $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);  
  108.                     $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);  
  109.                     $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);  
  110.                     $likeType .= $linkOkstr;  
  111.                 }  
  112.                 else  
  113.                 {  
  114.                     $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);  
  115.                     if(is_array($dtp2->CTags))  
  116.                     {  
  117.                         foreach($dtp2->CTags as $tagid=>$ctag)  
  118.                         {  
  119.                             if(isset($row[$ctag->GetName()])) $dtp2->Assign($tagid,$row[$ctag->GetName()]);  
  120.                         }  
  121.                     }  
  122.                     $likeType .= $dtp2->GetResult();  
  123.                 }  
  124.             }  
  125.             if($col>1) $likeType .= "</dd>\r\n";  
  126.             $GLOBALS['autoindex']++;  
  127.         }  
  128.         //Loop Col  
  129.         if($col>1)  
  130.         {  
  131.             $i += $col - 1;  
  132.             $likeType .= "  </dl>\r\n";  
  133.         }  
  134.     }  
  135.     //Loop for $i  
  136.     $dsql->FreeResult();  
  137.     if($cacheid !='') {  
  138.         WriteCacheBlock($cacheid$likeType);  
  139.     }  
  140.     return $likeType;  
  141. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值