dede如何指定关键词调用?

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

使用系统自带的 {dede:likearticle} 标签(最推荐)

这是DedeCMS内置的功能,专门用于调用“相关文章”,其原理就是匹配当前文章的 keywords 字段,这是最简单、最标准的方法。

dede指定关键词调用
(图片来源网络,侵删)

基本语法

{dede:likearticle}
    <a href='[field:arcurl/]'>[field:title/]</a>
{/dede:likearticle}

常用属性详解

你可以通过添加属性来精确控制调用结果。

属性名 说明 示例
row 调用文章的数量 row='10' (调用10篇)
col 每行显示的列数 col='2' (每行显示2篇,会自动用<li><dl>等标签换行)
infolen 简介/摘要长度 infolen='100' (摘要最多显示100个字符)
orderby 排序方式 orderby='pubdate' (按发布时间排序), orderby='hot' (按点击量排序), orderby='rand' (随机排序)
idlist 指定文章ID列表 idlist='1,3,5,8' (只调用ID为1,3,5,8的文章,这是实现你需求的关键属性)
keyword 指定关键词 keyword='织梦,DedeCMS' (调用关键词包含“织梦”或“DedeCMS”的文章)
typeid 指定栏目ID typeid='5' (只在ID为5的栏目内查找)
channelid 指定模型ID channelid='1' (只在文章模型中查找)
subday 指定天数内 subday='30' (只调用30天内发布的文章)

场景1:调用当前文章的“相关文章”(基于关键词)

这是 {dede:likearticle} 最经典的应用,在你的文章内容页模板(通常是 article_article.htm)中,加入以下代码:

<h3>相关文章</h3>
<ul class="related-article">
    {dede:likearticle row='8' titlelen='40' orderby='rand'}
        <li><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></li>
    {/dede:likearticle}
</ul>

工作原理:当这个标签在文章内容页被解析时,DedeCMS会自动获取当前文章的 keywords 字段,然后去数据库中查找 keywords 字段包含相同关键词的其他文章。


场景2:直接指定关键词调用(回答你的核心问题)

如果你想在一个固定的页面(比如首页某个板块)调用包含特定关键词的文章,而不是依赖当前文章的关键词,你可以使用 keyword 属性。

dede指定关键词调用
(图片来源网络,侵删)

示例:在首页调用所有包含“织梦教程”关键词的文章

在你的首页模板(通常是 index.htm)中,加入以下代码:

<h3>织梦教程专题</h3>
<ul class="dede-tutorial">
    {dede:likearticle keyword='织梦教程' row='6' titlelen='35' orderby='pubdate'}
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            <span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
    {dede:likearticle}
</ul>

说明

  • keyword='织梦教程':这里明确指定了要查找的关键词。
  • 如果一篇文章的 keywords 字段是“织梦,教程,建站”,它同样会被匹配到。
  • 你也可以用逗号隔开多个关键词,表示“或”的关系,keyword='织梦,教程' 会调用关键词包含“织梦”或者包含“教程”的所有文章。

使用 {dedarclist} 标签 + SQL语句(更灵活)

如果你觉得 {dede:likearticle} 的功能不够用,或者需要进行更复杂的查询,可以使用功能更强大的 {dede:arclist} 标签,并通过 innertext 属性配合自定义SQL。

这种方法的核心是利用DedeCMS的 arc_search 函数,它专门用来处理关键词的模糊匹配。

示例:调用包含“织梦”关键词的文章,并按点击量排序

{dede:arclist row='10' titlelen='40' orderby='click'}
    {dede:field name='array' runphp='yes'}
        $keywords = '织梦'; // 你要查找的关键词
        $arcitle = @me;
        $search_result = Search_keywords($arcitle['keywords'], $keywords);
        if ($search_result) {
            // 如果匹配成功,则输出此li的内容
            @me = '<li><a href="'.$arcitle['arcurl'].'" title="'.$arcitle['title'].'">'.$arcitle['title'].'</a></li>';
        } else {
            // 如果匹配失败,则输出空,不显示此条
            @me = '';
        }
    {/dede:field}
{/dede:arclist}

代码解析

  1. {dede:arclist}: 先正常调用文章列表。
  2. {dede:field name='array' runphp='yes'}: 对每篇文章的数据(存放在数组 @me 中)进行PHP处理。
  3. $keywords = '织梦';: 设置你要查找的目标关键词。
  4. Search_keywords($arcitle['keywords'], $keywords): 这是DedeCMS的核心函数,它检查文章自身的 keywords 是否包含你设定的 $keywords
  5. if ($search_result): 如果包含,则用PHP代码拼接出HTML标签并赋值给 @me;如果不包含,则 @me 设为空字符串,该条目就不会显示。

使用自定义SQL(最高级,不推荐新手)

这种方法性能最好,但直接操作数据库,有一定风险,你需要确保你的关键词字段(通常是 keywords)是全文索引或者你知道如何进行高效的模糊查询。

示例:直接在模板中执行SQL

{dede:sql sql="
    SELECT id, title, arcurl
    FROM `#@__archives`
    WHERE keywords LIKE '%织梦教程%'
    AND arcrank > -1
    ORDER BY click DESC
    LIMIT 10
"}
    <li><a href='[field:arcurl/]'>[field:title/]</a></li>
{/dede:sql}

说明

  • #@__archives 是DedeCMS数据表 dede_archives 的前缀,你的前缀可能不是 dede_
  • keywords LIKE '%织梦教程%' 是标准的SQL模糊查询。
  • arcrank > -1 是一个常用条件,表示只审核通过的文章。
  • 这种方法简单粗暴,但不灵活,如果网站更换了关键词字段名,或者修改了数据结构,这里的代码就会失效。

总结与建议

方法 优点 缺点 适用场景
{dede:likearticle} 简单、标准、安全,官方支持 功能相对固定 绝大多数情况下的首选,特别是“相关文章”和指定关键词调用。
{dede:arclist} + PHP 极其灵活,可结合所有arclist属性 代码稍复杂,需要懂一点PHP 需要在复杂条件下调用,比如按某个自定义字段排序,并配合关键词筛选。
自定义SQL 性能可能最高 不灵活、有风险,硬编码了表名和字段 对性能有极致要求,且查询逻辑非常固定,不会轻易改变的场景。

对于你的问题“dede指定关键词调用”,强烈推荐使用方法一({dede:likearticle},因为它最符合DedeCMS的设计理念,也最稳定可靠,只有在它无法满足你的特殊需求时,才考虑使用方法二。

-- 展开阅读全文 --
头像
织梦调用地区联动类别
« 上一篇 03-01
dede文学网整站源码获取与使用指南?
下一篇 » 03-01

相关文章

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

目录[+]