AnQiCMS 模板如何根据当前文章获取并显示相关文章列表?

在 AnQiCMS 模板中,如何智能地展示相关文章列表?

当我们发布一篇精彩的文章后,自然希望读者能继续在网站上浏览更多感兴趣的内容。这就涉及到在文章详情页底部展示“相关文章”列表的技巧了。一个优秀的相关文章推荐,不仅能有效延长用户在网站上的停留时间,提升用户体验,对网站的SEO优化和内容深度挖掘也大有裨益。安企CMS(AnQiCMS)深知这一点,并为此提供了非常简洁高效的模板标签,让我们能够轻松实现这一功能。

核心机制:archiveList 标签与 type="related" 参数

在 AnQiCMS 的模板体系中,archiveList 标签是获取文章列表的万能钥匙。它功能强大且灵活,能够根据各种条件筛选和展示文章。而要实现“相关文章”的调用,关键在于为 archiveList 标签设置一个特殊的参数:type="related"

type 参数设置为 related 时,archiveList 标签不再需要您手动指定分类ID、排序方式等繁琐信息,而是会自动根据当前文章的上下文,智能地寻找与之关联的文章进行展示。这一设计极大地简化了模板开发者的工作,让您能够专注于内容的呈现。

AnQiCMS 如何判断“相关”?

AnQiCMS 在默认情况下,如何判断哪些文章是“相关”的呢?它的智能逻辑是:根据当前文章的 ID,从同一个分类中查找在发布时间或 ID 上临近的文章进行展示。这种基于分类和邻近度的默认逻辑,通常能满足大部分网站的基本需求,确保了相关性。

不过,如果您对“相关”的定义有更精细的控制需求,archiveList 标签还提供了 like 参数来扩展这种智能匹配:

  • 基于关键词关联 (like="keywords"):如果您希望相关文章的判断依据是文章中使用的关键词,可以设置 like="keywords"。这样,系统会尝试找出与当前文章关键词标签相符的其他文章。这对于强调内容主题一致性的网站非常有用。
  • 基于后台手动关联 (like="relation"):当您在安企CMS后台编辑文章时,可以手动为文章指定具体的“相关文档”。如果您希望模板只展示这些您精心挑选的内容,通过设置 like="relation",模板就能准确地调用您在后台配置的关联文章。这提供了最高度的内容控制力。

需要注意的是,type="related" 标签只能在文章详情页使用,因为它需要当前文章的上下文信息来判断相关性。

如何在模板中实现相关文章列表?

现在,让我们看看如何在您的安企CMS模板中添加这段代码。通常,这部分内容会放置在文章详情页(例如 template/default/article/detail.html 或您自定义的详情模板)的正文内容之后。

{# 假设这是您的文章详情页模板,在展示完文章内容后,可以添加以下代码来显示相关文章 #}

<article>
    {# ... 这里是文章标题、发布时间、正文内容等,使用 archiveDetail 标签或 {{archive.*}} 直接调用 ... #}

    <div class="article-content">
        {{- archiveDetail articleContent with name="Content" render=true -}}
        {{ articleContent|safe }}
    </div>

    {# 相关文章列表区域开始 #}
    <div class="related-articles-section">
        <h3>相关推荐</h3>
        <ul class="related-articles-list">
            {% archiveList archives with type="related" limit="5" %} {# 调用相关文章,限制显示5篇 #}
                {% for item in archives %}
                    <li>
                        <a href="{{ item.Link }}">
                            {% if item.Thumb %}
                                <img src="{{ item.Thumb }}" alt="{{ item.Title }}" class="related-article-thumb">
                            {% endif %}
                            <div class="related-article-info">
                                <h4>{{ item.Title }}</h4>
                                <p class="description">{{ item.Description|truncatechars:80 }}</p> {# 截取描述,显示前80个字符 #}
                                <div class="meta">
                                    <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                                    <span>阅读量:{{ item.Views }}</span>
                                </div>
                            </div>
                        </a>
                    </li>
                {% empty %}
                    <li>暂无相关文章推荐。</li>
                {% endfor %}
            {% endarchiveList %}
        </ul>
    </div>
    {# 相关文章列表区域结束 #}

</article>

代码解析:

  1. {% archiveList archives with type="related" limit="5" %}: 这是核心标签。
    • archives: 我们将获取到的相关文章列表赋值给一个名为 archives 的变量,以便在后续的 for 循环中使用。
    • type="related": 明确告诉 AnQiCMS,我们希望获取的是与当前文章相关的推荐内容。
    • limit="5": 控制显示相关文章的数量,这里设置为最多显示5篇。您可以根据页面布局和需求调整这个数字。
  2. {% for item in archives %}: 遍历 archives 变量中的每一篇文章。在循环内部,item 代表当前遍历到的单篇文章对象。
  3. {{ item.Link }}: 输出相关文章的链接。
  4. {% if item.Thumb %}<img src="{{ item.Thumb }}" ...>{% endif %}: 判断文章是否有缩略图,如果有则显示。缩略图能有效提升列表的视觉吸引力。
  5. <h4>{{ item.Title }}</h4>: 显示相关文章的标题。
  6. <p class="description">{{ item.Description|truncatechars:80 }}</p>: 显示文章的简介,并使用 truncatechars 过滤器将其截断为80个字符,避免内容过长影响布局。
  7. {{ stampToDate(item.CreatedTime, "2006-01-02") }}: 使用 stampToDate 标签将文章的创建时间戳格式化为“年-月-日”的形式。
  8. {{ item.Views }}: 显示文章的阅读量。
  9. {% empty %}<li>暂无相关文章推荐。</li>{% endfor %}: 这是一个非常有用的 for 循环特性。如果 archives 列表为空(即没有找到相关文章),就会显示 {% empty %} 块中的内容,而不是空白。

进阶使用与优化建议

  • 通过 like 参数微调相关性:如果默认的“同分类临近文章”逻辑不满足需求,别忘了尝试 like="keywords"like="relation",通过后台的关键词标签或手动关联功能,实现更精准的推荐。
  • 控制显示数量limit 参数非常灵活,除了设置固定数量,您也可以使用 limit="2,5" 这样的格式,表示从第2条(索引从0开始,实际是第3条)开始,显示5篇文章。
  • 样式美化:上面的代码只提供了HTML结构,您需要根据自己的网站设计,为 related-articles-sectionrelated-articles-listrelated-article-thumb 等元素添加合适的CSS样式,使其与整体页面风格协调一致。
  • 持续优化:观察用户行为数据,例如相关文章的点击率,定期