织梦网站文章相互调用

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

looploop函数可以直接在模板文件(.htm)中执行SQL查询,并将结果循环输出。

织梦网站文章相互调用
(图片来源网络,侵删)

下面我将详细介绍loop函数的用法,并提供几种最常见的文章调用场景示例。


核心函数:loop

loop函数是DedeCMS为了在模板中直接执行SQL查询而设计的,它的基本语法如下:

{dede:loop table='表名' sort='排序字段' row='记录条数' if='条件语句'}
    // 循环体内的内容,即每条记录的显示格式
{/dede:loop}

参数详解:

  • table (必需): 指定要查询的数据库表名,对于文章调用,通常是 dede_archives(文章主表)或 dede_arctype(栏目表)。
  • sort (可选): 指定排序方式。
    • id: 按文章ID排序
    • pubdate: 按发布时间排序
    • click: 按点击量排序
    • rand(): 随机排序
    • hot: 按热度排序(需要额外配置)
  • row (可选): 指定获取的记录条数。row='10' 表示获取10条记录。
  • if (可选): 指定查询条件,这是实现“相关文章”等复杂功能的关键。if="typeid='2' AND arcrank > -1"

循环体内可用字段:

{dede:loop}{/dede:loop} 之间,你可以使用当前记录的字段,对于文章调用,最常用的字段来自 dede_archives 表,包括:

  • id: 文章ID
  • typeid: 栏目ID: 文章标题
  • shorttitle: 文章短标题
  • pubdate: 发布时间(时间戳)
  • click: 点击量
  • arcrank: 文章状态(-1为待审核,0为正常)
  • ismake: 是否生成静态页
  • channel: 所属模型ID

常见文章调用场景示例

假设我们要在文章详情页(article_article.htm)或列表页(list_*.htm)中调用相关文章。

织梦网站文章相互调用
(图片来源网络,侵删)

最新文章

调用全站最新的10篇文章。

<h3>最新文章</h3>
<ul>
    {dede:loop table='dede_archives' sort='pubdate' row='10' if='arcrank=0'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            <span>([field:pubdate function="MyDate('Y-m-d',@me)"/])</span>
        </li>
    {/dede:loop}
</ul>

说明:

  • sort='pubdate': 按发布时间降序排列(最新的在前)。
  • if='arcrank=0': 只调用状态为“正常”的文章,过滤掉待审核的。
  • [field:arcurl/]: 这是DedeCMS的默认标签,用于获取文章的链接。注意loop标签默认不支持arcurl,需要DedeCMS V5.7及以上版本或开启相关功能,如果无效,可以手动拼接链接:/plus/view.php?aid=[field:id/]
  • [field:pubdate function="MyDate('Y-m-d',@me)"/]: 对时间戳进行格式化,显示为年-月-日。

热门文章

调用全站点击量最高的10篇文章。

<h3>热门文章</h3>
<ul>
    {dede:loop table='dede_archives' sort='click' row='10' if='arcrank=0'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            <span>(点击:[field:click/])</span>
        </li>
    {dede:loop}
</ul>

说明:

织梦网站文章相互调用
(图片来源网络,侵删)
  • sort='click': 按点击量降序排列。

随机文章

随机调用10篇文章,每次刷新页面都会变化。

<h3>随机推荐</h3>
<ul>
    {dede:loop table='dede_archives' sort='rand()' row='10' if='arcrank=0'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
        </li>
    {/dede:loop}
</ul>

说明:

  • sort='rand()': 使用rand()函数进行随机排序。

相关文章(最常用)

这是loop功能最强大的地方,实现相关文章通常有两种思路:

同栏目文章

调用与当前文章同一栏目的其他文章(不包括自己)。

<h3>相关文章</h3>
<ul>
    {dede:loop table='dede_archives' sort='pubdate' row='8' if='typeid=[field:typeid/] AND id != [field:id/] AND arcrank=0'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
        </li>
    {/dede:loop}
</ul>

说明:

  • typeid=[field:typeid/]: 这是关键![field:typeid/]会获取到当前文章所在的栏目ID,注意,这个标签只能在文章内容页模板中使用。
  • id != [field:id/]: 排除当前文章本身,避免显示重复。

关键词相关(更智能)

调用包含当前文章关键词的其他文章,这需要先获取当前文章的关键词,然后进行模糊查询。

<h3>关键词相关</h3>
<ul>
    {dede:loop table='dede_archives' sort='pubdate' row='8' if='keywords LIKE "%[field:keywords/]%" AND id != [field:id/] AND arcrank=0'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
        </li>
    {/dede:loop}
</ul>

说明:

  • keywords LIKE "%[field:keywords/]%": 使用 LIKE 进行模糊匹配,是通配符,表示任意字符。
  • 注意:这种方法的缺点是,如果当前文章的关键词是“网站建设”,那么标题为“我的网站建设日记”和“网站建设的重要性”都会被匹配到,但标题为“网站优化”的则不会,效果取决于关键词的设置。

进阶技巧与注意事项

  1. arcurl标签问题

    • 在较新版本的DedeCMS中,{dede:loop} 内的 [field:arcurl/] 默认是可用的。
    • 如果在你的版本中无效,最可靠的方法是手动拼接链接:/plus/view.php?aid=[field:id/]
  2. 使用SQLJOIN查询: 如果你想同时获取文章标题和栏目名称,而dede_archives表中没有栏目名称,你需要进行JOIN查询,连接dede_archivesdede_arctype表。

    <h3>带栏目名的文章列表</h3>
    <ul>
        {dede:loop table='dede_archives a LEFT JOIN dede_arctype t ON a.typeid=t.id' sort='a.pubdate' row='5' if='a.arcrank=0'}
            <li>
                <span>[field:typename/]</span> - 
                <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            </li>
        {/dede:loop}
    </ul>
    • table='dede_archives a LEFT JOIN dede_arctype t ON a.typeid=t.id': 这里给表起了别名 at,并在typeid字段上连接。
    • [field:typename/]: 现在就可以获取到栏目名称了。
  3. 性能考虑

    • loop功能非常强大,但因为它直接在模板中执行SQL,如果使用不当(例如复杂的JOIN、大量的数据),可能会对网站性能产生一定影响。
    • 对于热门文章、最新文章等调用频率高的模块,建议数据量不要设置得过大(row值不宜过高)。
    • 尽量使用简单的if条件。
  4. 标签与loop的选择

    • 对于调用当前栏目指定栏目下的文章,使用DedeCMS内置的标签(如{dede:arclist})通常更简单、高效,且支持更多参数。
    • 当你需要进行跨表查询复杂条件筛选(如相关文章)时,{dede:loop}是最佳选择。
调用类型 loop 代码片段 适用场景
最新文章 {dede:loop table='dede_archives' sort='pubdate' row='10' if='arcrank=0'}...{/dede:loop} 全站或指定区域展示最新内容。
热门文章 {dede:loop table='dede_archives' sort='click' row='10' if='arcrank=0'}...{/dede:loop} 展示点击量高的文章,吸引用户。
随机文章 {dede:loop table='dede_archives' sort='rand()' row='10' if='arcrank=0'}...{/dede:loop} 增加页面新鲜感,展示用户可能忽略的内容。
同栏相关 {dede:loop ... if='typeid=[field:typeid/] AND id != [field:id/]'}...{/dede:loop} 文章详情页,提供高度相关的阅读内容。
关键词相关 {dede:loop ... if='keywords LIKE "%[field:keywords/]%" AND id != [field:id/]'}...{/dede:loop} 文章详情页,基于内容主题推荐。

掌握{dede:loop}函数,你就能在织梦模板中实现绝大多数复杂的数据调用需求,让你的网站内容更加丰富和互联。

-- 展开阅读全文 --
头像
dede程序如何本地部署运行?
« 上一篇 03-08
C语言中temp变量的具体用途是什么?
下一篇 » 03-08

相关文章

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

目录[+]