在网站运营中,我们经常需要根据内容的某种状态,比如是否启用、是否推荐、是否在线等,在前台页面展示相应的文本提示。直接输出后端返回的布尔值 true 或 false 可能显得不够直观和友好。安企CMS(AnQiCMS)的模板引擎提供了一个简洁而强大的工具——yesno 过滤器,它能帮助我们将这些布尔值或字段的存在状态,优雅地转化为易于理解的自定义文本,例如“已启用/未启用/待定”。
理解 yesno 过滤器的核心作用
yesno 过滤器的核心作用在于,能够根据后端返回的数据状态,自动将其转换成我们预设的文本输出。它主要识别三种状态:
- 逻辑真值 (True Value):通常对应于布尔值
true。 - 逻辑假值 (False Value):通常对应于布尔值
false。 - 空值/未定义 (Nil/Empty Value):当变量是
nil、空字符串 (""),或者根本未被定义时。
通过这个过滤器,我们可以避免在模板中编写复杂的 if-else 逻辑来处理这些常见的状态判断,使代码更加整洁和高效。
基本用法:默认输出
yesno 过滤器最简单的使用方式是直接将其应用于一个变量,它会按照默认的“yes”、“no”、“maybe”进行输出。
例如,假设我们有一个变量 userActive:
- 如果
userActive的值为true,输出会是yes。 - 如果
userActive的值为false,输出会是no。 - 如果
userActive的值为nil或未定义,输出会是maybe。
在模板中,您可以这样使用:
{# 假设 userActive 为 true #}
<span>用户状态:{{ userActive|yesno }}</span> {# 输出: 用户状态:yes #}
{# 假设 userActive 为 false #}
<span>用户状态:{{ userActive|yesno }}</span> {# 输出: 用户状态:no #}
{# 假设 userActive 为 nil 或未定义 #}
<span>用户状态:{{ userActive|yesno }}</span> {# 输出: 用户状态:maybe #}
这种默认输出在某些场景下可能已经足够,但更多时候,我们希望能输出更具业务含义的文本。
定制化输出:实现“已启用/未启用/待定”
为了满足更多样化的显示需求,yesno 过滤器允许我们自定义这三种状态的输出文本。您只需在过滤器后面提供一个逗号分隔的字符串,依次对应 true、false 和 nil/empty 的输出。
语法格式如下:
{{ 变量名|yesno:"自定义True值,自定义False值,自定义Nil值" }}
现在,让我们来解决“已启用/未启用/待定”这个具体需求:
{# 假设 userActive 为 true #}
<span>用户状态:{{ userActive|yesno:"已启用,未启用,待定" }}</span> {# 输出: 用户状态:已启用 #}
{# 假设 userActive 为 false #}
<span>用户状态:{{ userActive|yesno:"已启用,未启用,待定" }}</span> {# 输出: 用户状态:未启用 #}
{# 假设 userActive 为 nil 或未定义 #}
<span>用户状态:{{ userActive|yesno:"已启用,未启用,待定" }}</span> {# 输出: 用户状态:待定 #}
通过这种方式,我们可以轻松地将后端数据转化为用户友好的显示文本。
实战场景:将 yesno 过滤器应用于 AnQiCMS 模板
在 AnQiCMS 的实际应用中,yesno 过滤器可以运用在多个方面,比如文章、产品、分类等内容的管理。
场景一:展示文章或产品是否启用
假设在您的内容模型(比如文章模型 archive)中,自定义了一个布尔字段 IsActive 来表示内容是否处于启用状态。当编辑文章时,这个字段可能是 true 或 false,如果未设置(例如新的自定义字段尚未初始化),则可能为 nil 或空。
在文章详情页或列表页的模板中,您可以使用 yesno 过滤器来直观地显示其状态:
{# 在文章详情页模板中 (例如 archive/detail.html) #}
{% archiveDetail currentArchive with name="Title" %}
{% archiveDetail isActiveStatus with name="IsActive" %}
<article>
<h1>{{ currentArchive }}</h1>
<p>启用状态:<span class="status-indicator">{{ isActiveStatus|yesno:"已启用,未启用,待定" }}</span></p>
{# ...其他内容... #}
</article>
这里,currentArchive 假设是当前页面的文章标题,而 isActiveStatus 则是从自定义字段 IsActive 获取的值。
场景二:判断某个功能配置是否开启
安企CMS的系统设置中(help-setting-system.md),通常会包含一些配置项,它们的值可能是布尔型,或者通过其是否存在来判断。例如,您可能有一个自定义系统参数 EnableComment 来控制是否开启评论。
”`twig {# 在页面的某个功能区,根据系统设置判断是否显示评论功能 #} {% system enableCommentSetting with name=“EnableComment” %}
{% if enableCommentSetting %}
<div