织梦如何调用多篇文章?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 织梦建站 正文

使用 arclist 标签(最常用、最灵活)

arclist 是织梦中最强大的文章列表标签,可以满足绝大多数的文章调用需求,它可以指定栏目、文章数量、排序方式、是否包含子栏目等。

织梦调用共多篇文章
(图片来源网络,侵删)

基本语法

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

参数详解

参数 说明 示例
typeid 指定栏目ID,调用指定栏目下的文章。 typeid='1' (调用栏目ID为1下的文章)
多个栏目ID,用逗号隔开。 typeid='1,3,5' (调用栏目1,3,5下的文章)
包含子栏目,在栏目ID后加 c,表示调用该栏目及其所有子栏目下的文章。 typeid='1c' (调用栏目ID为1及其所有子栏目的文章)
row 调用文章数量,必须设置。 row='10' (调用10篇文章)
orderby 排序方式 orderby='hot' (按浏览量从高到低)
orderby='click' (同上)
orderby='pubdate' (按发布时间,默认)
orderby='sortrank' (按后台排序)
orderby='rand' (随机排序)
orderway 排序方向desc 降序(从高到低),asc 升序(从低到高)。 orderway='desc'
flag 特定属性文章,用 分隔多个属性。 flag='h' (头条)
flag='c' (推荐)
flag='h,c' (头条或推荐)
flag='a' (特荐)
channelid 指定模型ID1 代表文章,2 代表图集,以此类推。 channelid='1' (只调用文章)
limit 记录起始偏移,格式为 起始数,记录数 limit='5,10' (从第6条开始,调用10条)
subday 指定天数内,调用多少天之内发布的文章。 subday='7' (调用一周内发布的文章)
noflag 排除特定属性文章,与 flag 相反。 noflag='h' (调用非头条的文章)

综合示例

场景:调用栏目ID为5的“产品中心”及其所有子栏目下的最新5篇文章,标题显示30个字符。

<h3>最新产品</h3>
<ul>
    {dede:arclist typeid='5c' row='5' titlelen='30' orderby='pubdate' orderway='desc'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
        </li>
    {/dede:arclist}
</ul>

使用 list 标签(用于当前栏目列表)

list 标签通常用在列表页模板list_article.htm)中,用于显示当前栏目下的文章列表,它不需要指定 typeid,因为默认就是当前栏目。

基本语法

{dede:list pagesize='10'}
    <a href='[field:arcurl/]'>[field:title/]</a>
    <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
{/dede:list}

关键参数

参数 说明 示例
pagesize 每页显示文章数量 pagesize='15' (每页显示15篇文章)

分页调用

list 标签结束后,加上分页标签。

织梦调用共多篇文章
(图片来源网络,侵删)
{dede:list pagesize='10'}
    <!-- 文章列表项 -->
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:list}
<!-- 分页条 -->
<div class="dede_pages">
    <ul>
        <li><span>共{dede:field.totalcount/}条记录</span></li>
        {dede:pagelist listsize='4'/}
    </ul>
</div>

使用 sql 标签(最高级、最灵活)

arclistlist 无法满足复杂的查询需求时,可以使用 sql 标签直接执行自定义的SQL语句。注意:此方法需要你对织梦的数据库表结构有一定了解,且存在一定的安全风险,务必做好过滤。

常用数据表

  • dede_archives: 文章主表,包含文章ID、标题、发布时间等。
  • dede_arctype: 栏目表,包含栏目ID、栏目名称等。
  • dede_addonarticle: 文章附加表,包含文章内容、作者等。

基本语法

{dede:sql sql='SELECT * FROM `dede_archives` ORDER BY pubdate DESC LIMIT 0, 10'}
    <a href='/plus/view.php?aid=[field:id/]'>[field:title/]</a>
    <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
{/dede:sql}

安全过滤(非常重要!)

为了避免SQL注入,你应该使用 safe 属性来过滤输出。

{dede:sql sql='SELECT * FROM `dede_archives` WHERE typeid = 5 ORDER BY pubdate DESC LIMIT 0, 10'}
    <a href='/plus/view.php?aid=[field:id/]' title="[field:title function='html2text(@me)'/]">[field:title function='htmlspecialchars(@me)'/]</a>
{/dede:sql}
  • function='html2text(@me)': 将HTML标签转换为纯文本,用于 title 属性。
  • function='htmlspecialchars(@me)': 将HTML特殊字符转义,防止XSS攻击。

综合示例

场景:调用“头条”和“推荐”属性的文章,且文章标题不为空。

{dede:sql sql="
    SELECT a.id, a.title, a.pubdate
    FROM `dede_archives` AS a
    LEFT JOIN `dede_arctype` AS t ON a.typeid = t.id
    WHERE (a.flag LIKE '%h%' OR a.flag LIKE '%c%') AND a.title != ''
    ORDER BY a.pubdate DESC
    LIMIT 0, 8
"}
    <li>
        <a href='/plus/view.php?aid=[field:id/]' title="[field:title function='html2text(@me)'/]">[field:title/]</a>
        <small>[field:pubdate function="MyDate('m-d', @me)"/]</small>
    </li>
{/dede:sql}

调用特定栏目(如“关于我们”)的单篇文章

有时候你可能只想调用某个栏目下的一篇文章,关于我们”页面的内容。

织梦调用共多篇文章
(图片来源网络,侵删)

使用 arclist 调用单篇

设置 row='1' 即可。

{dede:arclist typeid='2' row='1'}
    <h2>[field:title/]</h2>
    [field:body/]
{/dede:arclist}
  • typeid='2' 是“关于我们”栏目的ID。
  • [field:body/] 用于调用文章的全文内容。

使用 sql 调用单篇

{dede:sql sql='SELECT body FROM `dede_addonarticle` WHERE aid = 10'}
    [field:body/]
{/dede:sql}
  • 这种方法需要你知道文章的ID(aid)。

总结与对比

方法 适用场景 优点 缺点
arclist 绝大多数列表调用(首页、栏目页、自定义页面) 功能强大,参数丰富,灵活,安全 参数较多,初学者可能需要记忆
list 当前栏目的列表页 语法简单,无需指定栏目ID 只能用于列表页,功能相对固定
sql 复杂、特殊、跨表的查询 灵活性最高,可以实现任何逻辑 需要SQL知识,有安全风险,性能稍差
单篇调用 调用固定的一篇文章(如关于我们) 简单直接 只能调用特定ID的文章

建议:

  • 日常使用,优先使用 arclist,它能解决90%的需求。
  • 列表页,使用 list
  • 只有在 arclist 无法实现时,再考虑使用 sql 标签,并务必做好安全过滤。

希望这份详细的指南能帮助你熟练地在织梦中调用多篇文章!

-- 展开阅读全文 --
头像
C语言如何实现CPython?
« 上一篇 今天
织梦文件夹权限如何正确设置?
下一篇 » 今天

相关文章

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