在 AnQiCMS 灵活强大的模板系统中,实现内容的高度定制化是提升用户体验和满足运营需求的关键。其中,结合 if 逻辑判断标签进行条件性的关键词替换,能让我们的网站内容更加智能、精准,无论是为了优化 SEO 效果,还是为了在特定场景下提供更具吸引力的信息,这都是一个非常实用的技巧。
让我们一起探索如何在 AnQiCMS 中运用这一功能,让网站内容焕发新的活力。
理解核心工具:if 标签与内容处理
在 AnQiCMS 的模板语法中,if 标签是进行逻辑判断的基石。它允许我们根据设定的条件来决定是否执行某段代码,或者在多种可能性中选择其一。其基本结构与我们熟悉的编程语言类似:
{% if 条件 %}
<!-- 条件为真时执行的代码 -->
{% elif 其他条件 %}
<!-- 第一个条件不满足,但其他条件为真时执行的代码 -->
{% else %}
<!-- 所有条件都不满足时执行的代码 -->
{% endif %}
而要实现关键词替换,我们则需要借助 AnQiCMS 提供的过滤器功能。其中,replace 过滤器能帮助我们将字符串中的指定旧词替换为新词,而 contain 过滤器则可以用来判断内容中是否包含某个关键词,为 if 标签提供判断依据。
replace过滤器:{{ obj|replace:"旧词,新词" }},它会将obj变量中的所有“旧词”替换为“新词”。contain过滤器:{{ obj|contain:"关键词" }},它会检查obj变量中是否包含指定的“关键词”,并返回True或False。set标签:{% set myVar = "some value" %},这个标签非常有用,可以帮助我们在模板中定义临时变量,让复杂的逻辑更清晰。
当然,要操作内容,我们首先得获取到它。archiveDetail 用于获取文档详情、categoryDetail 获取分类详情、system 获取全局设置等标签,都是我们获取目标内容 obj 的重要来源。
实战场景:条件性关键词替换的运用
通过 if 标签,我们可以根据不同的内容属性或访问上下文,智能地调整页面上的关键词。这比后台提供的“全站内容替换”更为精细和动态,后者通常用于全局性的、非条件性的内容批量处理。模板级的条件替换,则是在内容渲染到用户浏览器前,根据特定规则即时进行的。
场景一:基于分类的关键词替换
假设我们的网站销售多种商品,在“手机配件”分类下的所有产品详情页中,我们希望将产品描述中的“高品质”一词替换为“原厂级品质”,以强调其专业性。
在 product/detail.html(产品详情模板)中,我们可以这样操作:
{# 首先获取当前产品的分类ID #}
{% archiveDetail currentCategoryId with name="CategoryId" %}
{% if currentCategoryId == 15 %} {# 假设“手机配件”分类的ID是15 #}
{# 如果是手机配件分类,则替换关键词 #}
{% archiveDetail productContent with name="Content" %}
<div class="product-description">
{{ productContent|replace:"高品质,原厂级品质"|safe }}
</div>
{% else %}
{# 其他分类则显示原始内容 #}
{% archiveDetail productContent with name="Content" %}
<div class="product-description">
{{ productContent|safe }}
</div>
{% endif %}
这里我们通过 archiveDetail 获取了当前文档的分类ID,然后用 if 标签判断,如果是指定分类,就使用 replace 过滤器进行替换。记得要加上 |safe 过滤器,以确保 HTML 内容能够正确解析,而不是被转义成纯文本。
场景二:根据内容特性调整关键词
我们可能希望,如果文章标题中包含“教程”这个词,那么在文章摘要中,将“教程”替换为更具体的“操作指南”,以提高内容的吸引力。
在 article/list.html(文章列表模板)或者 article/detail.html(文章详情模板)中:
{% archiveList articles with type="list" limit="10" %} {# 假设在文章列表页 #}
{% for item in articles %}
<div class="article-item">
<h3><a href="{{item.Link}}">{{item.Title}}</a></h3>
<p>
{% set originalDescription = item.Description %}
{% if originalDescription|contain:"教程" %}
{# 如果摘要包含“教程”,则替换为“操作指南” #}
{{ originalDescription|replace:"教程,操作指南" }}
{% else %}
{# 否则显示原始摘要 #}
{{ originalDescription }}
{% endif %}
</p>
</div>
{% endfor %}
这个例子中,我们先用 set 标签将文章描述存入一个临时变量,然后使用 contain 过滤器判断是否包含特定关键词,再决定是否进行替换。
场景三:结合自定义字段进行替换
AnQiCMS 支持为内容模型添加自定义字段。我们可以利用这些字段来控制关键词替换。例如,如果产品模型有一个名为 IsFeatured(是否推荐)的布尔型自定义字段,我们希望当产品被标记为推荐时,将其名称中的“产品”一词替换为“推荐商品”。
假设 IsFeatured 字段在后台设置为“单项选择”,值为“是”或“否”。
{# 在产品详情页,获取自定义字段“IsFeatured”的值 #}
{% archiveDetail isFeaturedValue with name="IsFeatured" %}
<h3>
{% if isFeaturedValue == "是" %} {# 判断自定义字段的值 #}
{{ archive.Title|replace:"产品,推荐商品" }}
{% else %}
{{ archive.Title }}
{% endif %}
</h3>
这里我们直接通过 archiveDetail 标签获取自定义字段 IsFeatured 的值,并与字符串“是”进行比较,以实现条件性替换。
实施步骤与注意事项
- 确定替换目标: 明确你希望在哪个模板文件(如
detail.html,list.html)中的哪个内容字段(如Title,Content,Description或自定义字段)进行条件性替换。 - 定位模板文件: 根据 AnQiCMS 的模板目录结构 (
design-director.md),找到对应的模板文件进行编辑。例如,文章详情页通常是article/detail.html。 - 编写
if逻辑: 结合实际需求,使用if、elif、else构建判断条件,并嵌套replace过滤器。如果需要提前判断内容