欢迎来访实搜网站库!

蓝色 学校 微商 大气 企业

DEDECMS让typeid支持多栏目id调用

时间:2015-07-21 10:34
最近做织梦模板用typeid调用的时候发现个比较麻烦繁琐的调用以前我们都是这样来调栏目吧.{dede:type typeid=2}[field:typename]{/dede:type}.如果有很多个栏目不

     最近做织梦模板用typeid调用的时候发现个比较麻烦繁琐的调用 以前我们都是这样来调栏目吧.{dede:type typeid="2"}[field:typename]{/dede:type}.如果有很多个栏目不是得写很多次这种标签不.而且调的每个栏目肯定不是连续的.我从来没调过栏目还是连续的呢.是件很麻烦的事.现在我们只要这样做就可以解决一长串的type标签.{dede:typeid="2,3,4,5,6"}[field:typename]{/dede:type},这一个标签可以调用typeid里面你写的任意多的栏目ID.再多的不同栏目只需要写一条type标签了.是不是很人性化呢.我是感觉这个东西比较实用的呵.主要是之前做站就碰到这个问题.我伤脑筋啊.所以想无论如何得扩展他.
实现方式主要就是改标签文件了.多看几个官方写的标签自己就知道怎么写了.之前标签里面写的是getone.现在不能了.现在我改成了这样.

 $dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
                          From `dede_arctype` where id in ($typeid) ");


然后循环这个.大家看这个SQL语句应该就明白了的.如想有更多的了解,可以下载文件自己研究.

代码我也直接发布在下面,要的复制过去即可!

 

 <?php

if (!defined('DEDEINC'))
    exit('Request Error!');

function lib_type(&$ctag, &$refObj)
{
    global $dsql, $envs;

    $attlist = 'typeid|0';
    FillAttsDefault($ctag->CAttribute->Items, $attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $innertext = trim($ctag->GetInnerText());
    $revalue = "";

    if ($typeid == 0) {
        $typeid = (isset($refObj->TypeLink->TypeInfos['id']) ? $refObj->TypeLink->
            TypeInfos['id'] : $envs['typeid']);
    }

    if (empty($typeid))
        return '赋值不能为空';

    $dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
                       From `dede_arctype` where id in ($typeid) ");
    if (trim($innertext) == '')
        $innertext = GetSysTemplets("part_type_list.htm");
       
    $dsql->Execute();
    $dtp = new DedeTagParse();
    $dtp->SetNameSpace('field', '[', ']');
   
    while($row = $dsql->GetArray()) {
        $row['typelink'] = $row['typeurl'] = GetTypeUrl($row['id'],MfTypedir($row['typedir']),$row['isdefault'],$row['defaultname'],$row['ispart'],$row['namerule2'],$row['moresite'],$row['siteurl'],$row['sitepath']);
        $dtp->LoadSource($innertext);
        foreach($dtp->CTags as $tagid=>$ctag) {
      if(!empty($row[strtolower($ctag->GetName())])) {
       $dtp->Assign($tagid,$row[$ctag->GetName()]);
      }
    }
        $revalue .= $dtp->GetResult();
    }
return $revalue;
}

?>