织梦cms,dedecms,type标签扩展

官方的type标签只能是选择一个ID的栏目,像这样
{dede:type typeid='2'}

而我想显示2,3,4多个栏目则只显示第一个ID的
{dede:type typeid='2,3,4'}

看了下官方type说明

标签名称:type
功能说明:表示指定的单个栏目的链接
适用范围:全局使用
基本语法:

{dede:type}
<a href="[field:typelink /]">[field:typename /]</a>
{/dede:type}

参数说明:
typeid=” 指定栏目ID
底层模板字段:
typename,typelink(仅表示栏目的网址), 栏目表dede_arctype的所有字段

没说怎么显示多个栏目的。

没办法找了相应的标签代码看了下,只能是显示一个栏目的ID

满足不了自己的需求就只能是自己加了

我这里自定义增加了 typearray 标签,标签代码如下

<!--?php   if(!defined('DEDEINC')) exit('Request Error!'); /**  * 指定的单个栏目的链接标签  *  * @version        $Id: typearray.lib.php 1 9:29 2012年3月20日Z 83 $  * @package        DedeCMS.Taglib  * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.  * @license        http://help.dedecms.com/usersguide/license.html  * @link           http://www.dedecms.com  * @author link    http://www.madeby83.com  */   /*-->>dede>>
指定栏目
全局标记
V55,V56,V57
表示指定的单个栏目的链接

{dede:type}
<a href="[field:typelink /]">[field:typename /]</a>
{/dede:type}


    typeid:指定栏目ID

>>dede>>*/

function lib_typearray(&$ctag,&$refObj)
{
    global $dsql,$envs;
    $attlist='typeid|0';
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $innertext = trim($ctag->GetInnerText());

//屏蔽默认为空的
//    if($typeid==0) {
//        $typeid = ( isset($refObj->TypeLink->TypeInfos['id']) ? $refObj->TypeLink->TypeInfos['id'] : $envs['typeid'] );
//    }

//换个效率更高点得
//   if(empty($typeid)) $typeid = $refObj->Fields['typeid2'];
   $typeid = empty($typeid) ? $refObj->Fields['typeid2'] : $typeid;

   if(!$typeid) return '';

   $row = array();

    $dsql->Execute("me", "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
                          FROM `#@__arctype` WHERE id IN ($typeid) ");

// if(!is_array($dsql->GetArray("me"))) return '';  取消了判断结果集,这里不知道会不会出问题,高手请指教
    if(trim($innertext)=='') $innertext = GetSysTemplets("part_type_list.htm");

    $dtp = new DedeTagParse();
    $dtp->SetNameSpace('field','[',']');
    $dtp->LoadSource($innertext);
    if(!is_array($dtp->CTags)) {
        unset($dtp);
        return '';
    }else {
      while($row = $dsql->GetArray("me")){
           $row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
          foreach($dtp->CTags as $tagid=>$ctag) {
                if($ctag->GetName()=='array'){
                    $dtp->Assign($tagid, $row);
              }else{
                    if( !empty($row[$ctag->GetName()])) $dtp->Assign($tagid,$row[$ctag->GetName()]);
                }
            }
           $revalue .= $dtp->GetResult();
       }
        return $revalue;
    }
}

保存为 typearray.lib.php 放在include/taglib/下

然后在模板里面使用就可以了

{dede:typearray typeid='2,3,4'}
<a href="[field:typelink /]">[field:typename /]</a>
{/dede:typearray}

这样就调出了ID为2,3,4的栏目链接了
如果不定义typeid,调用文章副栏目,如果没有则不显示。

本文为原创,转载请注明:83

One comment on “织梦cms,dedecms,type标签扩展