在网站运营中,我们经常需要根据内容的某种状态,比如是否启用、是否推荐、是否在线等,在前台页面展示相应的文本提示。直接输出后端返回的布尔值 truefalse 可能显得不够直观和友好。安企CMS(AnQiCMS)的模板引擎提供了一个简洁而强大的工具——yesno 过滤器,它能帮助我们将这些布尔值或字段的存在状态,优雅地转化为易于理解的自定义文本,例如“已启用/未启用/待定”。

理解 yesno 过滤器的核心作用

yesno 过滤器的核心作用在于,能够根据后端返回的数据状态,自动将其转换成我们预设的文本输出。它主要识别三种状态:

  1. 逻辑真值 (True Value):通常对应于布尔值 true
  2. 逻辑假值 (False Value):通常对应于布尔值 false
  3. 空值/未定义 (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 过滤器允许我们自定义这三种状态的输出文本。您只需在过滤器后面提供一个逗号分隔的字符串,依次对应 truefalsenil/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 来表示内容是否处于启用状态。当编辑文章时,这个字段可能是 truefalse,如果未设置(例如新的自定义字段尚未初始化),则可能为 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