在网站运营中,文章的标签(Tag)不仅有助于内容的分类和检索,还能通过关键词的形式提升页面的SEO效果。很多时候,我们需要在页面的特定位置,比如<meta name="keywords">标签中,或者文章内容底部,将多个标签以逗号分隔的形式展现出来。安企CMS(AnQiCMS)提供了简洁而灵活的模板语法,让这一操作变得非常直接。
了解文章标签数据的来源
在安企CMS中,一篇文章的标签数据可以通过 tagList 标签获取。这个标签设计得非常灵活,当你在文章详情页使用它时,如果省略 itemId 参数,它会自动识别并获取当前文章所关联的所有标签。每个标签都会作为一个对象返回,其中包含标签的 Title(标题)、Link(链接)等信息。
如何连接标签成字符串
由于 tagList 返回的是一个标签对象列表,而不是一个简单的字符串列表,我们不能直接使用 join 过滤器将它们连接起来。最常用且有效的方法是结合 for 循环和条件判断,逐一输出标签标题并手动添加分隔符。
以下是实现这一功能的具体步骤和代码示例:
获取文章的标签列表 首先,我们需要使用
tagList标签来获取当前文章的所有标签。在文章详情页(例如archive/detail.html或自定义的文档详情模板)中,可以直接调用,它会自动关联到当前展示的文章。{% tagList articleTags %} {# articleTags 将包含当前文章的所有标签对象 #} {% endtagList %}在这里,我们把获取到的标签列表赋值给了
articleTags这个变量。在循环中构建逗号分隔的字符串 接下来,我们将遍历
articleTags列表,取出每个标签的Title属性,并在每个标签标题之后添加逗号和空格,但要避免在最后一个标签后添加逗号。这可以通过forloop.last属性来判断。<div class="article-tags"> <strong>关键词:</strong> {% tagList articleTags %} {% for tag in articleTags %} {{ tag.Title }} {% if not forloop.last %}, {% endif %} {% endfor %} {% else %} <span>暂无标签</span> {% endtagList %} </div>{% for tag in articleTags %}:开始遍历articleTags列表,将每个标签对象赋值给tag变量。{{ tag.Title }}:输出当前标签的标题。{% if not forloop.last %}, {% endif %}:这是一个关键的条件判断。forloop.last会在当前迭代是循环中的最后一个元素时返回true。因此,if not forloop.last意味着“如果这不是最后一个元素”,我们就输出一个逗号和空格,。{% else %} <span>暂无标签</span> {% endtagList %}:如果文章没有任何标签,可以显示一个默认提示,提升用户体验。
完整示例代码
假设您希望在文章详情页的文章内容下方展示这些标签:
<article class="article-detail">
<h1>{{ archive.Title }}</h1>
<div class="article-meta">
发布日期: {{ stampToDate(archive.CreatedTime, "2006-01-02") }} | 浏览量: {{ archive.Views }}
</div>
<div class="article-content">
{{ archive.Content|safe }}
</div>
<div class="article-keywords">
<strong>关键词:</strong>
{% tagList articleTags %}
{% for tag in articleTags %}
<a href="{{ tag.Link }}" title="{{ tag.Title }}">{{ tag.Title }}</a>{% if not forloop.last %}, {% endif %}
{% endfor %}
{% else %}
<span>暂无标签</span>
{% endtagList %}
</div>
</article>
在这个例子中,每个标签都被包装成一个带有链接的锚文本,点击后可以跳转到该标签的聚合页,这对于SEO和用户导航都非常有益。
将标签字符串用于 <meta name="keywords">
如果您需要将这些标签用于页面的 meta keywords,您可以使用 set 标签先将标签标题收集起来,然后再进行拼接。由于AnQiCMS的模板引擎并不直接支持在循环内动态构建列表并使用 join 过滤器,最稳妥的方法是在后端准备好这个字符串,或者在前端通过JavaScript处理(但这不是模板层面的解决方案)。
然而,考虑到现代SEO实践中,meta keywords 的权重已经非常低,甚至被多数搜索引擎忽略,更常见且推荐的做法是将标签作为可见内容展示在页面上,并确保其具有良好的可访问性和内部链接。如果坚持需要在模板中构建,可能需要考虑模板引擎更高级的特性或后台数据处理。
总结
通过 tagList 标签结合 for 循环和 forloop.last 条件判断,您可以在AnQiCMS模板中灵活地将文章的多个标签连接成一个以逗号分隔的字符串,并根据需求选择是否将其转换为可点击的链接。这种方法既能满足内容展示的需求,也为网站的SEO优化提供了基础支持。
常见问题 (FAQ)
问:我能否让输出的标签直接成为可点击的链接,而不是纯文本的逗号分隔字符串? 答:完全可以。在上面的示例代码中,我们已经展示了如何通过在
{{ tag.Title }}外面包裹<a>标签,并使用{{ tag.Link }}作为链接地址,从而使每个标签都成为一个可点击的链接。这样不仅美观,也提升了用户体验和网站内部链接的SEO效果。问:如果文章没有任何标签,页面会显示什么? 答:在提供的示例代码中,我们使用了
{% else %}语句。如果tagList没有获取到任何标签,那么for循环内的内容将不会执行,而是会执行{% else %}后面的内容,即显示<span>暂无标签</span>。您可以根据自己的需求修改这段提示文本或选择不显示任何内容。问:如何在文章列表页展示每篇文章的标签,而不是只在详情页? 答:在文章列表页,您通常会使用
archiveList标签来循环展示多篇文章。在archiveList的循环(for item in archives)内部,您可以再次嵌套tagList标签,并通过itemId=item.Id参数明确指定要获取当前循环文章的标签。这样,每篇文章的标签都会正确显示。例如:{% archiveList archives with type="page" limit="10" %} {% for item in archives %} <div class="article-item"> <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3> <div class="article-tags"> {% tagList currentArticleTags with itemId=item.Id %} {% for tag in currentArticleTags %} <a href="{{ tag.Link }}">{{ tag.Title }}</a>{% if not forloop.last %}, {% endif %} {% endfor %} {% endtagList %} </div> </div> {% endfor %} {% endarchiveList %}