dede频道页如何调用list列表数据?

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

核心概念:频道页与 list
  1. 频道页:

    dede 频道页 调用list
    (图片来源网络,侵删)
    • 这是指一个栏目(频道)的列表页面,你的网站有一个“公司新闻”栏目,那么访问这个栏目的链接(如 http://yourdomain.com/plus/list.php?tid=5)就是频道页。
    • 这个页面的主要作用就是展示该栏目下的所有文章(或子栏目)的标题、发布时间等信息,形成列表。
    • 模板文件通常存放在 /templets/你的模板目录/ 目录下,文件名与栏目英文名或ID相关,list_article.htm
  2. list:

    • 这是DedeCMS中专门用于在列表页调用文章列表的底层标签。
    • 它会根据当前页面的栏目ID(tid),自动从数据库中查询属于该栏目的所有文章,并进行分页处理。
    • list 标签内部必须嵌套一个循环标签,通常是 [field:函数],用于对每一条获取到的文章进行格式化输出。

list 标签的基本结构

list 标签的基本语法如下:

{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}

结构解析:

  1. {dede:list ...}: 开始标签,用于定义列表查询的参数。
  2. [field:xxx/]: 这是字段调用标签,用于在循环中输出当前文章的特定信息,它必须被 {dede:list} 包裹。
    • [field:title/]: 文章标题。
    • [field:arcurl/]: 文章的完整链接地址。
    • [field:pubdate/]: 文章发布时间(时间戳格式)。
    • [field:description/]:
    • [field:litpic/]: 文章缩略图。
    • [field:click/]: 文章点击数。
    • ...等等。
  3. {/dede:list}: 结束标签,标志着列表循环的结束。

list 标签的常用属性

你可以在 {dede:list} 标签中添加属性来控制列表的显示方式。

属性名 说明 示例
pagesize 每页显示的文章数量,这是最重要的属性。 pagesize='10' (每页显示10篇文章)
infolen 摘要长度(截取字符数)。 infolen='120' (摘要最多显示120个字符)
orderway 排序方式。desc 为降序(默认,最新的在前),asc 为升序(最旧的在前)。 orderway='asc'
keyword 关键词,用于只显示包含特定关键词的文章。 keyword='织梦'
limit 起始位置,显示数量limit='0,10' 表示从第0条开始,显示10条,等同于 pagesize='10'limit='10,10' 表示从第10条开始,显示10条(用于分页)。 limit='0,5'

综合示例: 调用“公司新闻”栏目下的文章,每页显示8条,标题长度限制在40个字符,按发布时间降序排列。

dede 频道页 调用list
(图片来源网络,侵删)
{dede:list pagesize='8' titlelen='40' orderway='desc'}
    <div class="news-item">
        <h3><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h3>
        <p class="news-info">发布时间:[field:pubdate function="MyDate('Y-m-d',@me)"]</p>
        <p class="news-summary">[field:description function="cn_substr(@me, 100)"]...</p>
    </div>
{/dede:list}

完整的频道页模板示例

一个功能完整的频道页(list_article.htm)通常包含三个部分:

  1. 页面头部{dede:include filename="head.htm" /}
  2. 栏目信息:显示当前栏目的名称和描述。
  3. 文章列表:使用 {dede:list} 标签调用。
  4. 分页条{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno' /}
  5. 页面底部{dede:include filename="footer.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/}" />
    <link rel="stylesheet" href="/templets/default/style.css">
</head>
<body>
    <!-- 头部 -->
    {dede:include filename="head.htm" /}
    <!-- 主体内容区 -->
    <div class="main-container">
        <div class="page-title">
            <h1>{dede:field.title/}</h1>
            <p>{dede:field.description/}</p>
        </div>
        <!-- 文章列表开始 -->
        <div class="article-list">
            {dede:list pagesize='10' titlelen='50' infolen='200'}
            <article class="post-item">
                <h2><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></h2>
                <div class="post-meta">
                    <span>发布时间:[field:pubdate function="MyDate('Y-m-d H:i',@me)"]</span>
                    <span>作者:[field:writer/]</span>
                    <span>浏览:[field:click/]</span>
                </div>
                <div class="post-content">
                    <p>[field:description/]</p>
                    <a href="[field:arcurl/]" class="read-more">阅读全文 →</a>
                </div>
            </article>
            {/dede:list}
        </div>
        <!-- 文章列表结束 -->
        <!-- 分页条开始 -->
        <div class="pagination">
            {dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
            </div>
        <!-- 分页条结束 -->
    </div>
    <!-- 底部 -->
    {dede:include filename="footer.htm" /}
</body>
</html>

常见问题与解决方法

问题1:为什么我的频道页调用不到文章?

  • 原因1:栏目没有绑定模板。
    • 解决:进入DedeCMS后台 -> 【核心】-> 【频道管理】-> 点击你的栏目 -> 在右侧“列表选项”中,为“列表模板”选择一个正确的模板文件(如 list_article.htm)。
  • 原因2:栏目类型错误。
    • 解决:检查栏目的“栏目类型”,如果类型是“外部链接”,则它没有内容列表,无法调用,请将其改为“栏目首页”。
  • 原因3:文章没有审核或未归档到正确栏目。
    • 解决:确保文章已通过审核,并且在“选择栏目”时,正确地选择了你要显示的栏目。

问题2:list 标签和 arclist 标签有什么区别?

这是新手最容易混淆的地方。

特性 {dede:list} {dede:arclist}
使用场景 频道页 (plus/list.php) 首页、封面页 等非列表页面
数据来源 只调用当前栏目 (tid) 的文章。 可以跨栏目调用文章,支持 typeidchannelid 等属性来指定来源。
分页 自动处理分页,无需手动写分页代码。 不处理分页,如果需要分页,需要自己配合 php 代码或 GetPageList 标签来实现,比较复杂。
性能 在列表页中,性能更优,因为它直接服务于当前栏目。 灵活性高,但用在列表页时,如果调用数据量大,可能会有性能问题。

简单记:

dede 频道页 调用list
(图片来源网络,侵删)
  • 列表页,用 {dede:list}
  • 首页、其他频道页、文章页等地方需要调用文章列表时,用 {dede:arclist}

进阶技巧:结合 channellist 实现带子栏目的列表页

我们希望在频道页同时显示“子栏目”和“子栏目下的文章”,这时需要结合 {dede:channel}{dede:list}

<!-- 遍历当前栏目下的所有一级子栏目 -->
{dede:channel type='son' currentstyle=''}
    <div class="sub-channel">
        <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
        <!-- 调用当前子栏目下的文章列表 -->
        {dede:list pagesize='5'}
            <dl>
                <dt><a href="[field:arcurl/]">[field:title/]</a></dt>
                <dd>[field:pubdate function="MyDate('Y-m-d',@me)"]</dd>
            </dl>
        {/dede:list}
        <a href="[field:typelink/]" class="more">查看更多 →</a>
    </div>
{/dede:channel}

代码解释:

  1. {dede:channel type='son'}: 获取当前栏目的所有子栏目。
  2. [field:typelink/]: 子栏目的链接地址。
  3. {dede:list ...}: 在 {dede:channel} 的循环内部,{dede:list} 会自动切换为调用当前子栏目的文章列表。

希望这份详细的指南能帮助你完全掌握在DedeCMS频道页使用 list

-- 展开阅读全文 --
头像
织梦做一个会员申请功能
« 上一篇 01-04
C语言中LoadLibrary如何正确使用?
下一篇 » 01-04

相关文章

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