dede如何读取标题含特定字符的文章列表?

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

使用自带的功能标签(最简单)

如果你的需求是创建一个固定的栏目,专门用来展示包含某个关键词的文章,这是最推荐的方法。

dede读取标题中包含 的文章列表
(图片来源网络,侵删)

步骤:

  1. 创建一个新栏目

    • 登录 DedeCMS 后台。
    • 进入「栏目管理」->「添加栏目」。
    • 栏目名称:填写一个你想要的名称,‘织梦’相关文章”。
    • 栏目类型:选择“频道栏目”。
    • :选择“使用PHP”。
    • 填写其他基本信息后,点击“确定”。
  2. 编辑栏目的PHP文件

    • 在网站根目录下的 plus 文件夹里,找到你刚刚创建的栏目对应的 PHP 文件,如果你的栏目ID是 5,文件名就是 list.php?tid=5
    • 用代码编辑器(如 VS Code, Sublime Text, Notepad++)打开这个文件。
    • 将文件中的所有内容替换为以下代码:
    <?php
    require_once(dirname(__FILE__)."/../include/common.inc.php");
    // --- 这里是你的关键词 ---
    $keyword = '织梦'; // 请将 '织梦' 替换为你想搜索的关键词
    // 设置SQL查询语句
    // arc.title LIKE '%$keyword%' 表示在标题字段中模糊匹配包含关键词的记录
    $sql = "SELECT arc.*,tp.typename,tp.typedir 
            FROM `#@__archives` arc 
            LEFT JOIN `#@__arctype` tp ON arc.typeid = tp.id 
            WHERE arc.title LIKE '%$keyword%' 
            ORDER BY arc.sortrank DESC 
            LIMIT 0, 10"; // LIMIT 0, 10 表示只显示最新的10条,你可以修改这个数字
    $dsql->SetQuery($sql);
    $dsql->Execute('list');
    $GLOBALS['autoindex'] = 0;
    while($row = $dsql->GetArray('list')) {
        $row['typeurl'] = GetTypeUrl($row['typedir'], $row['typedir'], $row['isdefault'], $row['defaultname'], $row['ispart'], $row['namerule2'], $row['moresite'], $row['siteurl']);
        $row['arcurl'] = GetArcUrl($row['arcid'], $row['typeid'], $row['senddate'], $row['title'], $row['ismake'], $row['arcrank'], $row['namerule'], $row['typedir'], $row['money'], $row['filename'], $row['moresite'], $row['siteurl']);
        $row['litpic'] = $row['litpic'] == '' ? $GLOBALS['cfg_cmspath'].'/images/defaultpic.gif' : $row['litpic'];
        // 将文章数据赋值给模板引擎
        $GLOBALS['arr'][] = $row;
        $GLOBALS['autoindex']++;
    }
    // 加载模板文件
    // 这里我们直接使用列表页模板,你也可以创建一个专门的模板
    $tempfile = DedeInclude('templets/list_default.htm');
    $pv = new PartView();
    $pv->SetTemplet($tempfile);
    $pv->Display();
    ?>
  3. 使用模板

    dede读取标题中包含 的文章列表
    (图片来源网络,侵删)
    • 这段代码会自动加载系统默认的列表页模板 templets/list_default.htm
    • 你可以复制 list_default.htm 并重命名(my_keyword_list.htm),然后修改 list.php 文件中的 $tempfile 变量来指向你的新模板。
    • 在模板文件中,使用 {dede:list} 标签来循环输出文章列表,和普通列表页完全一样。
    {dede:list}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
    {/dede:list}

优点

  • 操作简单,适合固定的关键词列表。
  • 管理方便,在后台就可以直接访问。

缺点

  • 每个关键词都需要创建一个独立的栏目和PHP文件,不够灵活。

使用自定义标签(更灵活)

如果你想在任何地方(比如首页、文章页)调用这个列表,而不想创建新栏目,可以使用自定义标签的方法。

步骤:

dede读取标题中包含 的文章列表
(图片来源网络,侵删)
  1. 创建自定义标签文件

    • 在网站根目录的 include/tag 文件夹下,创建一个新文件,keyword.lib.php
  2. 编写标签代码

    • 打开 keyword.lib.php,将以下代码粘贴进去:
    <?php
    if(!defined('DEDEINC')) exit('Request Error!');
    function lib_keyword(&$ctag, &$refObj)
    {
        global $dsql;
        // 获取标签属性,{dede:keyword keyword='织梦' row='8'}
        $attlist = "keyword|,row|10";
        FillAttsDefault($ctag->CAttribute->Items, $attlist);
        extract($ctag->CAttribute->Items, EXTR_SKIP);
        // 如果没有设置关键词,则返回空
        if(empty($keyword)) return '';
        $revalue = '';
        // 构建SQL查询
        $sql = "SELECT id, title, arc FROM `#@__archives` WHERE title LIKE '%$keyword%' ORDER BY sortrank DESC LIMIT 0, $row";
        $dsql->Execute('list', $sql);
        while($row = $dsql->GetArray('list')) {
            $arcurl = GetArcUrl($row['arc'], $row['typeid'], $row['senddate'], $row['title'], $row['ismake'], $row['arcrank'], $row['namerule'], $row['typedir'], $row['money'], $row['filename'], $row['moresite'], $row['siteurl']);
            // 拼接返回的HTML内容
            // 这里使用模板语法,方便在标签内自定义样式
            $revalue .= sprintf(
                '<li><a href="%s" title="%s">%s</a></li>',
                $arcurl,
                $row['title'],
                cn_substr($row['title'], 30) // 截取标题前30个字符
            );
        }
        return $revalue;
    }
    ?>
  3. 在模板中使用标签

    • 你可以在任何模板文件(如 index.htm, article_article.htm 等)中使用这个自定义标签了。
    <h3>包含“织梦”关键词的文章</h3>
    <ul>
        {dede:keyword keyword='织梦' row='5'}
        [field:global name=autoindex runphp='yes']if(@me==1)@me='<li class="first">';else @me='<li>';[/field:global]
        <a href="[field:arcurl/]">[field:title/]</a>
        </li>
        {/dede:keyword}
    </ul>
    • 标签参数说明:
      • keyword='织梦':指定要搜索的关键词。
      • row='5':指定要显示的文章数量。

优点

  • 非常灵活,可以在任何模板中随意调用。
  • 可以动态指定关键词和显示数量。

缺点

  • 需要手动创建和上传文件,对新手稍微复杂一点。

使用DedeCMS的“SQL查询”标签(最强大)

这种方法直接在模板中使用 {dede:sql} 标签进行数据库查询,无需创建任何额外的PHP文件。

步骤:

  1. 在模板中直接使用标签

    • 在你想要显示列表的模板文件中,直接插入以下代码:
    <h3>包含“PHP”关键词的文章</h3>
    <ul>
        {dede:sql sql='SELECT id, title, arc FROM `#@__archives` WHERE title LIKE "%PHP%" ORDER BY sortrank DESC LIMIT 0, 8'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
        {/dede:sql}
    </ul>

代码解释:

  • sql='SELECT ...':这里是标准的MySQL查询语句。
    • SELECT id, title, arc:选择文章的ID、标题和路径字段。
    • FROM#@archives`从文章主表查询。#@` 是 DedeCMS 的表前缀占位符。
    • WHERE title LIKE "%PHP%":这是核心,LIKE 用于模糊匹配, 是通配符,%PHP% 表示标题中任何位置包含 "PHP" 的记录。
    • ORDER BY sortrank DESC:按文章排序号降序排列,即最新的在前。
    • LIMIT 0, 8:限制只返回8条结果。
  • [field:arcurl/]{dede:sql} 标签没有像 {dede:list} 那样内置URL生成函数,所以我们需要手动调用 GetArcUrl 函数,我们可以通过 function 属性来实现:
    • [field:arc function="GetArcUrl(@me, 0, 0, '', '', 0, '', '', '', '', '', '')"/] 这种写法比较麻烦。
    • 更简单的方法是查询 arc 字段(即文章的文件名或ID),然后用 MakeArcUrl() 函数,上面的例子中,arc 字段可以直接用于生成URL,所以直接用 [field:arcurl/] 是一个简写,前提是你的SQL查询了 arc 字段。

修正后的更健壮的写法:

<h3>包含“PHP”关键词的文章</h3>
<ul>
    {dede:sql sql='SELECT id, title, typeid, senddate, filename FROM `#@__archives` WHERE title LIKE "%PHP%" ORDER BY sortrank DESC LIMIT 0, 8'}
    <li>
        <!-- 使用function属性调用PHP函数生成URL -->
        <a href="[field:id function='MakeArchives(@me, @this)'/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
    {/dede:sql}
</ul>

注意:MakeArchives 函数可能不是所有版本都通用,最稳妥的方法是查询 arcidtypeid,然后调用 GetArcUrl

优点

  • 无需创建任何文件,直接在模板里搞定。
  • 功能最强大,可以执行任何你想要的SQL查询。

缺点

  • 直接操作数据库,如果SQL语句写错,可能会导致页面出错。
  • 可读性稍差,对于模板和PHP都不太熟的用户来说有一定门槛。

总结与推荐

方法 优点 缺点 适用场景
功能标签 简单,后台管理方便 不够灵活,每个关键词需一个文件 创建固定的、长期存在的关键词专题列表。
自定义标签 灵活,可复用,可在任何地方调用 需要手动创建PHP文件 需要在网站多个不同位置动态调用不同关键词的列表。
SQL查询标签 极其灵活,无需额外文件 直接操作SQL,有一定风险,可读性差 快速实现临时需求,或进行复杂的数据查询。

给你的建议:

  • 如果你只是想在某个地方一次性地展示一个关键词的文章列表,推荐使用方法三(SQL查询标签),因为它最快,不需要修改任何文件。
  • 如果你希望这个功能能在网站多处复用,并且希望管理起来更规范,强烈推荐方法二(自定义标签),这是最专业和灵活的解决方案。
  • 如果你只是想做一个固定的专题栏目方法一(功能标签) 是最简单的选择。
-- 展开阅读全文 --
头像
织梦首页为何不生成HTML文件夹?
« 上一篇 2025-12-14
c语言 pan.baidu.com 资源在哪找?
下一篇 » 2025-12-15

相关文章

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

目录[+]