在网站内容展示中,文章标题的长度控制是一个常见的需求,尤其是在列表页、推荐位等场景,过长的标题可能会破坏页面布局,影响用户体验。安企CMS(AnQiCMS)提供了强大而灵活的模板标签和过滤器,帮助用户轻松实现对文章标题 archive.Title 进行长度获取和截断显示。
AnQiCMS 模板中的文章标题
在安企CMS的模板中,当我们处理文章数据时,通常会通过 archiveDetail 标签获取单篇文章的详细信息,或者在 archiveList 标签的循环中遍历文章列表。无论哪种方式,文章标题都可以通过 {{archive.Title}} 或 {{item.Title}} 这样的变量形式直接访问。
例如,在文章详情页,我们可以直接这样获取标题:
<div>文章标题:{{ archive.Title }}</div>
而在文章列表页,通过 archiveList 标签循环获取的每篇文章,其标题则可以通过 item.Title 访问:
{% archiveList archives with type="list" limit="10" %}
{% for item in archives %}
<h3>{{ item.Title }}</h3>
{% endfor %}
{% endarchiveList %}
了解了如何访问标题变量后,我们就可以运用安企CMS内置的过滤器来进一步处理它了。
获取文章标题的字符长度:length 过滤器
有时候,我们不仅需要截断标题,还可能需要根据标题的实际长度来做一些逻辑判断。例如,当标题过长时才显示截断后的内容,否则显示完整标题。这时,length 过滤器就派上用场了。
length 过滤器可以返回字符串的字符数量。值得一提的是,安企CMS对中文字符的处理非常友好,一个中文字符被计算为一个字符,而不是多个字节。
使用方法非常简单:
{# 假设我们有一个文章标题变量 `archive.Title` #}
{% set title_length = archive.Title|length %}
<div>文章标题的长度是:{{ title_length }}</div>
在实际应用中,我们可以这样利用标题长度进行条件判断:
{% if archive.Title|length > 30 %}
<p>该标题超过30个字符,需要截断显示。</p>
{% else %}
<p>标题长度适中:{{ archive.Title }}</p>
{% endif %}
通过 length 过滤器,我们能精确地获取标题的字符长度,为后续的显示逻辑提供数据支持。
实现内容截断显示:truncatechars 和 truncatewords 过滤器
获取了标题长度后,更直接的需求往往是将其截断以适应显示空间。安企CMS提供了两个非常实用的过滤器来实现这一功能:truncatechars 和 truncatewords。
1. 按字符截断:truncatechars
truncatechars 过滤器会按照指定的字符数对字符串进行截断。如果原始字符串的长度超过了指定字符数,它会在截断的末尾自动添加省略号(...),并且这三个省略号也包含在指定的总字符数内。
例如,我们想将文章标题截断为最多 20 个字符:
{# 原始标题: "安企CMS:高效、可定制的企业级内容管理系统,致力于提供..." #}
<div>短标题:{{ archive.Title|truncatechars:20 }}</div>
{# 假设原始标题为“安企CMS:高效、可定制的企业级内容管理系统” #}
{# 输出可能为: 安企CMS:高效、可定制... #}
这个过滤器非常适合需要严格控制显示宽度的场景,例如卡片式布局中的标题。
2. 按单词截断:truncatewords
相比于 truncatechars 的严格字符计数,truncatewords 过滤器则更注重语义完整性。它会按单词数进行截断,如果原始字符串的单词数量超过指定值,同样会在末尾添加省略号(...)。这种方式可以避免单词被从中间截断,使截断后的文本看起来更自然。
例如,我们将文章标题按 5 个单词截断:
{# 原始标题: "安企CMS:高效、可定制的企业级内容管理系统,致力于提供..." #}
<div>自然截断标题:{{ archive.Title|truncatewords:5 }}</div>
{# 输出可能为: 安企CMS:高效、可定制的企业级... #}
这个过滤器在标题内容相对较长,且希望保持阅读流畅性的场景下更为适用。
结合实际场景的应用
在实际的模板开发中,我们通常会在列表页结合 archiveList 标签使用这些过滤器,以确保所有文章标题的显示规范统一。
{# 假设这是一个文章列表页的模板文件 #}
{% archiveList archives with type="page" limit="10" %}
{% for item in archives %}
<div class="article-item">
{# 将标题截断为最多 30 个字符显示 #}
<h3><a href="{{ item.Link }}">{{ item.Title|truncatechars:30 }}</a></h3>
<p>{{ item.Description|truncatechars:100 }}</p>
<span class="meta">{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
</div>
{% empty %}
<p>暂时没有文章发布。</p>
{% endfor %}
{% endarchiveList %}
通过上述代码,所有列表中的文章标题都会被统一截断到 30 个字符,超出的部分会自动加上省略号,从而保证了列表页面的整洁和美观。
总结
安企CMS的模板系统提供了 length、truncatechars 和 truncatewords 等一系列强大而直观的过滤器,让网站运营者和模板开发者能够轻松地控制文章标题的显示长度。通过灵活运用这些工具,我们可以创建出既美观又用户友好的内容展示界面,有效提升网站的整体品质。
常见问题 (FAQ)
1. truncatechars 和 truncatewords 过滤器有什么区别?
truncatechars 过滤器是按字符数进行截断,包括中文字符在内,每个字符算一个长度,并在达到指定长度时添加省略号。它适合需要严格控制显示宽度的场景。truncatewords 过滤器则是按单词数(以空格分隔)进行截断,它会在最后一个完整单词后添加省略号。它更适合希望截断内容保持语义完整和自然阅读体验的场景。
2. 如果我的文章标题中含有 HTML 标签,截断时会怎么样?
安企CMS的 truncatechars 和 truncatewords 过滤器默认会将标题内容视为纯文本进行处理。这意味着如果标题中包含 <strong> 或 <em> 等 HTML 标签,这些标签本身也会被计入字符数或单词数,并且在截断时可能会导致 HTML 标签被破坏,无法正确渲染。因此,建议文章标题 archive.Title 通常只包含纯文本内容,避免使用 HTML 标签。对于含有 HTML 的富文本内容截断,安企CMS提供了 truncatechars_html 和 truncatewords_html 过滤器,它们能够智能地截断内容并尝试保留 HTML 结构的完整性。
3. 我可以自定义截断后显示的省略号(...)吗?
安企CMS内置的 truncatechars 和 truncatewords 过滤器在截断时会自动添加默认的省略号 ...,目前暂不支持直接通过参数自定义这个省略号的样式或内容。如果确实需要自定义,您可能需要组合使用 slice 过滤器来截取指定长度的字符串,然后手动拼接上您想要的自定义省略符号。不过,这会略微增加模板的复杂性,通常情况下使用默认的省略号即可满足需求。