玩转dedecms织梦的自定义标签

2021-04-02 热度 - 数据开发

1、在include/taglib文件夹中新建文件diy.lib.php,其中diy也就是你标签的名字。function的名字也必须跟文件名对应,固定格式lib_标签名,如lib_diy,本例子以调取文章为例。

<?php
/**
 * Created by fr.
 * Date: 2021/4/1
 * Time: 12:32
 *
 */
function lib_diy(&$ctag,&$refObj)
{
    global $dsql,$envs;
    /***
     * &$ctag 获取标签信息类
     * &$refObj 数据库信息类
     * $dsql 数据库操作类
     * $envs  栏目助手,记录着栏目的部分信息
     * 前台标签
     
     */
    /**默认属性定义*/
    $attlist="row|12,titlelen|24";
    /**给前台没有给出的属性变量值,前台有标明的不变*/
    FillAttsDefault($ctag->CAttribute->Items,$attlist);
    /**绑定默认参数$ctag->CAttribute->Items 是前台模板标签传来的值array (size=2)
    'row' => string '2' (length=1)
    'titlelen' => string '36' (length=2)
    获取参数 row='2' titlelen='36'*/
    extract($ctag->CAttribute->Items, EXTR_SKIP);
    $revalue = ''; /** 定义空字符串用于返回数据*/
    /**获取标签内的值 <span>[field:title/]</span>*/
    $innertext = $ctag->GetInnerText();
    $ctp = new DedeTagParse(); /** 声明Dede织梦模板类*/
    $ctp->SetNameSpace('field', '[', ']'); /** 设置标记的命名空间,默认为dede*/
    $sql = "SELECT * FROM `#@__archives` WHERE 1=1 limit 0, $row"; /** 编写sql语句*/
    $dsql->Execute('me',$sql); /** 执行一个带返回结果的函数*/
    while($rs = $dsql->GetArray('me'))
    {
        /**根据属性处理查询变量*/
        $rs['title'] = cn_substr($rs['title'], $titlelen);
        /**获取底层模板,将模板设置到CTags变量中*/
        $ctp->LoadSource($innertext);
        foreach($ctp->CTags as $tagid=>$ctag) {
            if(!empty($rs[strtolower($ctag->GetName())])) {
                $ctp->Assign($tagid,$rs[$ctag->GetName()]);
            }
        }
        /**根据底层模板及查询变量得到处理结果*/
        $revalue .= $ctp->GetResult();
    }
    return $revalue;
}
?>

前台标签调用方法

{dede:diy row='2' titlelen='36'}
  <span>[field:title/]</span>
 {/dede:diy}

 

打赏激励--若您觉得本文对您有所价值,请给我们打赏,这将是我们前进路上源源不绝的动力。
  • 请用 微信 给我们打赏

  • 请用 支付宝 给我们打赏

  • 扫一扫直接在微信中阅读

加群交流
本站群号二:41794974,本群适用于讨论dedecms模板制作、标签调用、问题求助、二次开发等相关话题。为营造良好的群内环境,拒绝闲聊、广告、黄赌毒等出现,一经发现违规,直接踢出。谢谢合作!
在线分享
  • 微信好友
  • QQ好友
  • QQ空间
  • 腾讯微博
  • 新浪微博
  • 豆瓣网
  • 百度贴吧