dede列表页如何调用自定义字段?

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

核心标签:{dede:list}

这是列表页调用的核心,所有字段都需要在这个标签的循环体内使用。

dede列表页字段调用
(图片来源网络,侵删)

基本语法:

{dede:list pagesize='10'}
    <!-- 在这里循环调用你需要显示的字段 -->
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function='MyDate("Y-m-d", @me)'/]</span>
    </li>
{/dede:list}

参数说明:

  • pagesize='10':表示每页显示 10 条数据,你可以根据需要修改这个数字。

常用基本字段调用

这些是文章列表中最常用、最核心的字段。

字段名 标签写法 说明
[field:title/] 调用文章标题。
文章链接 [field:arcurl/] 调用文章的完整访问链接。
发布时间 [field:pubdate/] 调用发布时间,格式为 Unix 时间戳。
点击数 [field:click/] 调用文章的点击次数。
文章ID [field:id/] 调用文章的唯一 ID。
栏目名称 [field:typename/] 调用文章所属栏目的名称。
栏目链接 [field:typeurl/] 调用文章所属栏目的链接。
文章作者 [field:writer/] 调用文章的发布作者。
文章来源 [field:source/] 调用文章的来源。

示例代码:

dede列表页字段调用
(图片来源网络,侵删)
<ul>
    {dede:list pagesize='8'}
    <li>
        <h2><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h2>
        <p class="info">
            发布时间:[field:pubdate function="MyDate('Y-m-d H:i:s', @me)"] &nbsp;|&nbsp;
            来源:[field:source/] &nbsp;|&nbsp;
            点击:[field:click/] 次
        </p>
        <p class="summary">
            [field:description/]... <a href="[field:arcurl/]">[查阅全文]</a>
        </p>
    </li>
    {/dede:list}
</ul>

高级字段调用与技巧

很多时候,我们需要调用更复杂或自定义的字段,这时就需要使用一些高级技巧。

调用自定义字段 (附加字段)

如果你的文章模型添加了自定义字段(price, author_intro),调用方法如下:

  • 直接调用: [field:自定义字段名/] 自定义字段名为 price,则调用 [field:price/]

  • 带条件判断调用(如果字段为空则不显示):

    {dede:list}
        <li>
            [field:title/]
            <!-- 如果price字段不为空,则显示价格 -->
            <span>
                [field:price runphp='yes']
                if(@me != '') @me = '价格:' . @me . '元';
                else @me = '';
                [/field:price]
            </span>
        </li>
    {/dede:list}

使用 function 对字段值进行格式化

这是最常用的高级功能,可以对字段(尤其是时间戳)进行自定义格式化。

  • 格式化时间: MyDate('格式', @me) 是织梦内置的时间格式化函数。

    <!-- 只显示年月日 -->
    [field:pubdate function='MyDate("Y-m-d", @me)'/]
    <!-- 显示完整的年月日时分秒 -->
    [field:pubdate function='MyDate("Y-m-d H:i:s", @me)'/]
  • 截取文本长度(如摘要): cn_substr(@me, 长度) 是织梦内置的中文截取函数。

    <!-- 截取摘要前100个字符 -->
    [field:description function='cn_substr(@me, 100)'/]
  • 自定义函数处理: 你可以在 include/extend.func.php 文件中自定义 PHP 函数,然后在模板中调用。 在 extend.func.php 中添加一个函数:

    function getFirstImg($body) {
        $preg = "/<img.*?src=[\'|\"](.*?)[\'|\"].*?[\/]?>/i";
        preg_match_all($preg, $body, $matches);
        if (!empty($matches[1][0])) {
            return $matches[1][0];
        } else {
            return '/images/default.jpg'; // 如果没有图片,返回默认图
        }
    }

    然后在列表页模板中调用:

    {dede:list}
        <img src="[field:body function='getFirstImg(@me)'/]" alt="[field:title/]">
    {/dede:list}

调用文章缩略图

缩略图是一个特殊字段,存储在文章附加表 dede_addonarticle 中,字段名为 litpic

  • 直接调用: [field:litpic/]

  • 调用带图片的文章,并为没有图片的文章设置默认图(推荐):

    {dede:list}
        <img src="[field:litpic/]" onerror="this.src='/images/default.jpg'">
    {/dede:list}

    这种方法简单,但如果文章本身没有图,会显示一个 broken link,更优雅的方式是使用 if 判断。

  • 使用 if 判断并设置默认图(推荐):

    {dede:list}
        <img src="
            [field:litpic runphp='yes']
            if(@me == '') @me = '/images/default.jpg';
            else @me = @me;
            [/field:litpic]
        " alt="[field:title/]">
    {/dede:list}

调用子栏目列表

如果你的栏目设置了“是栏目封面”,并且想在列表页显示其下的子栏目,可以使用 {dede:channel}

<h3>子栏目列表</h3>
<ul>
    {dede:channel type='son' noself='yes'}
    <li>
        <a href="[field:typelink/]">[field:typename/]</a>
    </li>
    {/dede:channel}
</ul>
  • type='son':表示调用当前栏目的子栏目。
  • noself='yes':表示不调用栏目本身。

分页标签调用

列表页下方通常会有分页导航,分页标签 {dede:pagelist} 应该放在 {dede:list} 标签循环体之外。

基本语法:

<div class="dede_pages">
    <ul class="pagelist">
        {dede:pagelist listsize='4' listitem='index,pre,next,end,option'}
        {/dede:pagelist}
    </ul>
</div>

参数说明:

  • listsize='4':显示 4 个“...”省略号。
  • listitem='...':定义分页显示哪些项目,可选值有:
    • index:首页
    • pre:上一页
    • pagelist:页码列表
    • next:下一页
    • end:末页
    • option:跳转下拉框

完整列表页模板示例

这是一个非常完整的列表页 list_article.htm 模板示例,包含了上面讲到的各种调用。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
    <meta name="description" content="{dede:field.description function='html2text(@me)'/}" />
    <meta name="keywords" content="{dede:field.keywords/}" />
</head>
<body>
    <div class="main">
        <!-- 当前栏目名称 -->
        <h1>{dede:field.title/}</h1>
        <!-- 文章列表 -->
        <ul class="article_list">
            {dede:list pagesize='10'}
            <li>
                <!-- 如果文章有缩略图,则显示图片,否则显示默认图 -->
                <div class="img">
                    <a href="[field:arcurl/]" title="[field:title/]">
                        <img src="
                            [field:litpic runphp='yes']
                            if(@me == '') @me = '/images/default.jpg';
                            else @me = @me;
                            [/field:litpic]
                        " alt="[field:title/]">
                    </a>
                </div>
                <div class="info">
                    <h2><a href="[field:arcurl/]" title="[field:title/]" target="_blank">[field:title/]</a></h2>
                    <p class="desc">[field:description function='cn_substr(@me, 150)'/]...</p>
                    <div class="meta">
                        <span>[field:pubdate function='MyDate("Y-m-d", @me)'/]</span>
                        <span>阅读:[field:click/]</span>
                        <span>评论:[field:scores/]</span>
                    </div>
                </div>
            </li>
            {/dede:list}
        </ul>
        <!-- 分页 -->
        <div class="dede_pages">
            <ul class="pagelist">
                {dede:pagelist listsize='4' listitem='index,pre,next,end,option'}
                {/dede:pagelist}
            </ul>
        </div>
    </div>
</body>
</html>
  1. 核心是 {dede:list},所有列表内容都在这个循环里。
  2. 基本字段[field:字段名/] 直接调用。
  3. 高级处理使用 function='自定义函数'runphp='yes' 来实现,特别是时间格式化和条件判断。
  4. 缩略图自定义字段是列表页美化和功能扩展的关键。
  5. 分页{dede:pagelist},放在列表循环外面。
  6. 善用 extend.func.php 可以极大地扩展模板的灵活性。

希望这份详细的指南能帮助你熟练掌握 DedeCMS 列表页的字段调用!

-- 展开阅读全文 --
头像
dede 列表页伪静态
« 上一篇 今天
dede当前文章id是什么?如何获取?
下一篇 » 今天

相关文章

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