dede标签如何自定义?实用标签方法有哪些?

99ANYc3cd6
预计阅读时长 26 分钟
位置: 首页 DEDE建站 正文

第一部分:DedeCMS 实用标签详解

这里的“实用”指的是在日常建站中最常用、最高频的标签。

dede一些实用标签及自定义标签方法
(图片来源网络,侵删)

调用标签

这类标签用于在首页、列表页、内容页等地方直接调用文章、图集等。

a. 调用文章列表(最常用)

这是最核心的标签,用于在首页或列表页调用文章。

标签结构:

{dede:arclist flag='h' typeid='1' row='10' titlelen='30' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}

常用属性说明:

dede一些实用标签及自定义标签方法
(图片来源网络,侵删)
属性名 说明 示例
typeid 指定栏目ID,调用指定栏目下的文章,多个ID用逗号隔开。 typeid='1,3,5'
row 调用文章数量 row='8' (调用8条)
infolen 简介长度(按字符数)。 infolen='100'
orderby 排序方式,常用值:pubdate(发布时间)、click(点击量)、id(文章ID)、sortrank(权重)。 orderby='click' (按点击量从高到低)
orderway 排序顺序desc(降序)、asc(升序)。 orderway='desc'
flag 文章属性,常用值:'h'(头条)、'c'(推荐)、'p'(图片)、's'(跳转),可以组合,如 flag='hc' flag='h' (只调用头条)
channelid 模型ID,默认为1(文章),如果调用图集、软件等,需要指定。 channelid='2' (调用图集)
subday 调用N天内的文章 subday='7' (调用最近7天发布的文章)
noheader 不包含顶级栏目,当调用子栏目时,防止顶级栏目也被调用。 noheader='1'

字段说明(用[field:xxx/]调用):

字段名 说明
[field:title/]
[field:arcurl/] 文章链接
[field:pubdate/] 发布时间(时间戳格式)
[field:description/] 文章简介(需要在后台文章模型中设置)
[field:litpic/] 文章缩略图
[field:click/] 文章点击量
[field:id/] 文章ID

示例:调用首页指定栏目下的最新5条文章,标题显示20个字符

{dede:arclist typeid='5' row='5' titlelen='20' orderby='pubdate'}
    <a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}

b. 调用栏目列表

用于在首页或列表页显示子栏目。

标签结构:

dede一些实用标签及自定义标签方法
(图片来源网络,侵删)
{dede:channel type='son' typeid='2'}
    <li><a href="[field:typeurl/]">[field:typename/]</a></li>
{/dede:channel}

常用属性说明:

属性名 说明 示例
typeid 父栏目ID,调用此ID下的子栏目。 typeid='1' (调用ID为1的栏目的子栏目)
type 栏目类型son(子栏目)、self(同级栏目)、top(顶级栏目)。 type='son'
row 调用栏目数量 row='6'

高级实用标签

a. 首页幻灯片/焦点图调用

通常调用带有flag='p'(图片)属性的推荐文章。

标签结构:

{dede:arclist flag='h' row='5' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]">
            <img src="[field:litpic/]" alt="[field:title/]">
            <span>[field:title/]</span>
        </a>
    </li>
{/dede:arclist}

操作提示: 在后台发布文章时,勾选“头条”和“图片”属性,即可被此标签调用。

b. 相关文章调用

页下方显示与当前文章相关的文章。

标签结构:

{dede:likearticle row='8' titlelen='24'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}

原理: 默认是按当前文章的关键词来匹配的,如果效果不好,可以去后台“系统” -> “系统基本参数” -> “核心设置”中修改“关键词匹配规则”。

c. 调用指定栏目的子栏目及子栏目下的文章

这是一个非常实用的组合,常用于制作网站的某个专题区块。

标签结构:

{dede:channel type='son' typeid='2'}
    <dl>
        <dt><a href="[field:typeurl/]">[field:typename/]</a></dt>
        <dd>
            {dede:arclist row='5' typeid='[field:id/]'}
                <a href="[field:arcurl/]">[field:title/]</a>
            {/dede:arclist}
        </dd>
    </dl>
{/dede:channel}

说明: [field:id/] 会动态获取到每个子栏目的ID,arclist 标签再用这个ID去调用该栏目下的文章。

d. 调用TAG标签

用于显示热门标签或所有标签。

标签结构:

{dede:tag row='30' sort='month'}
    <a href="[field:link/]">[field:tagname/]</a>
{/dede:tag}

常用属性:

  • row: 调用数量
  • sort: 排序方式,month(按月)、rand(随机)、week(按周)

自定义函数

在字段调用中,我们经常使用 function 来格式化数据。

  • 日期格式化: [field:pubdate function="MyDate('Y-m-d H:i',@me)"/] Y-m-d H:i 是目标格式,@me 代表字段原始值(时间戳)。

  • 截取字符串并加省略号: [field:title function='cn_substr(@me, 30)'/] cn_substr 是DedeCMS的截取函数,30是截取长度。

  • 去除HTML标签: [field:description function='htmlspecialchars(strip_tags(@me))'/] 先用 strip_tags 去除HTML标签,再用 htmlspecialchars 转义特殊字符,防止XSS攻击。


第二部分:自定义标签方法

当系统内置标签无法满足你的需求时,就需要自定义标签,自定义标签分为两种:

  1. 修改PHP源码文件(不推荐,升级会丢失)
  2. 制作自定义标签文件(推荐,更灵活,升级不丢失)

我们重点讲解推荐的方法

方法:制作自定义标签文件(以调用“最新会员”为例)

假设我们需要一个 {dede:newmember} 标签来调用注册的最新会员。

第一步:创建标签处理文件

/include/taglib/ 目录下,创建一个新文件,命名为 newmember.lib.php

<?php
/**
 * DedeCMS 最新会员标签
 * 调用方法: {dede:newmember row='10'}
 */
if (!defined('DEDEINC')) exit('Request Error!');
function lib_newmember(&$ctag, &$refObj)
{
    global $dsql;
    // 获取标签属性
    $attlist = "row|10";
    FillAttsDefault($ctag->CAttributeMatches, $attlist);
    $row = $ctag->GetAtt('row');
    // 初始化SQL查询
    $innertext = trim($ctag->GetInnerText());
    if (empty($innertext)) {
        $innertext = '<li><a href="[field:spaceurl/]">[field:uname/]</a></li>';
    }
    $dsql->SetQuery("SELECT mid, uname, spaceurl FROM `#@__member` ORDER BY mid DESC LIMIT 0, {$row}");
    $dsql->Execute('me');
    $artlist = '';
    while ($row = $dsql->GetArray('me')) {
        // 将[field:xxx/]占位符替换为实际值
        $fields = array(
            'uname' => $row['uname'],
            'spaceurl' => $row['spaceurl'] ? $row['spaceurl'] : $GLOBALS['cfg_cmspath'].'/member/index.php?uid='.$row['mid'],
        );
        $artlist .= str_replace(array_keys($fields), array_values($fields), $innertext);
    }
    return $artlist;
}
?>

代码解析:

  1. 文件名和函数名:文件名 newmember.lib.php 中的 newmember 就是你的标签名,函数名 lib_newmember 必须遵循 lib_[标签名] 的规则。
  2. 函数参数&$ctag 是标签本身,&$refObj 是引用对象(通常是页面类)。
  3. $attlist:定义标签可以接受的属性及其默认值。row|10 表示 row 属性,默认值为10。
  4. FillAttsDefault:这是一个DedeCMS内置函数,用于将用户设置的属性与默认属性合并,确保所有属性都有值。
  5. SQL查询:这里编写你自己的SQL语句,从 #@__member (会员表) 中查询最新的会员数据。
  6. $innertext:这是标签之间的内容,也就是你自定义的HTML模板,如果用户没有提供,就使用一个默认的模板。
  7. 字段替换:这是最关键的一步,循环查询结果,将模板中的 [field:uname][field:spaceurl] 等占位符替换为从数据库中获取的实际值。
  8. return $artlist:函数最终返回处理好的HTML字符串。

第二步:在模板中使用自定义标签

你可以在任何DedeCMS模板文件(如首页 index.htm)中像使用普通标签一样使用它。

<h3>最新注册会员</h3>
<ul>
    {dede:newmember row='5'}
        <li>
            <a href="[field:spaceurl/]">[field:uname/]</a>
            <span>加入时间:[field:jointime function="MyDate('Y-m-d', @me)"/]</span>
        </li>
    {/dede:newmember}
</ul>

说明:

  • {dede:newmember row='5'}:调用最新5个会员。
  • [field:spaceurl/][field:uname/]:是我们第一步在PHP文件中定义的字段。
  • [field:jointime/]:会员表中存储的是时间戳,我们同样可以用 function 来格式化它。

第三步:缓存

模板文件修改后,需要到后台“生成” -> “更新首页”或“更新HTML”,系统会重新编译模板,识别并执行你的新标签。


类型 标签/方法 核心用途 备注
基础 {dede:arclist} 调用文章列表 必须掌握,属性和字段要熟悉
{dede:channel} 调用栏目列表 用于导航、栏目块
高级 {dede:likearticle} 调用相关文章
{dede:tag} 调用标签云 用于SEO和内容聚合
组合标签 复杂的数据结构调用 如“栏目+文章”组合
自定义 创建 xxx.lib.php 调用非标准数据 如会员、商品、订单等
修改PHP源码 深度功能定制 不推荐,升级会失效

掌握这些实用标签和自定义方法,你就可以游刃有余地应对绝大多数DedeCMS网站的开发需求了,建议从模仿和修改现有标签开始,逐步过渡到编写自己的自定义标签。

-- 展开阅读全文 --
头像
C语言little bishops问题如何求解?
« 上一篇 12-07
C语言fixup overflow如何修复?
下一篇 » 12-07

相关文章

取消
微信二维码
支付宝二维码

目录[+]