织梦标签的嵌套判断

织梦的标签对于网长来说是个不错的东西,多少人用他实现了站长梦。但是它也有一些缺点,如不支持判断,不支持嵌套,系统带的单个标签又不能满足业务需要。

 

以下就讲如何在织梦里自定义标签来实现嵌套判断的效果,以下内容需要一点点开发基础。

标签都放在include/taglib目录,以*.lib.php命名,以下我们以mbox.lib.php为例。

新建include/taglib/mbox.lib.php

在文件里写函数lib_mbox (函数以lib_开头,后面和文件名一致)

function lib_mbox(&$ctag, &$refObj)
{
}

 

读取标签配置(这里设定有typeid,row,col三个参数,每个都有默认值)

 $innertext的值是标签内的值    {dede:mbox}和{/dede:mbox}中间的值,使用DedeTagParse进行分析可以得到高级使用,可以参考include/taglib/mytag.lib.php 文件。如果不需要可以不写。

$attlist = "typeid|0,row|100,col|1";
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $innertext = $ctag->GetInnerText();

 

读取当前页面的栏目id和父级栏目id

$ref_id = $refObj->TypeLink->TypeInfos['id'];
$ref_reid = $refObj->TypeLink->TypeInfos['reid'];

 

返回值到模板使用return而不是echo 

 

这些基本元素了解了之后就可以写代码了,不管是判断还是循环还是多层嵌套,应有尽有。

下面给出上面代码片段组合后的样子

 

function lib_mbox(&$ctag, &$refObj)
{
    $attlist = "typeid|0,row|100,col|1";
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $innertext = $ctag->GetInnerText();

    $ref_id = $refObj->TypeLink->TypeInfos['id'];
    $ref_reid = $refObj->TypeLink->TypeInfos['reid'];
 
    $data = "......";//具体实现省略
    return '这里是输出的数据'.$data;
}

 

模板里使用

 

    {dede:mbox typeid='67'}
       <li><a href="[field:typeurl/]">[field:typename/]</a></li>
    {/dede:mbox}

 

 

上一篇: 短域名代码实现   下一篇: 如何对文件路径加密

提交疑问

回顶部