AnQiCMS 的内容模型功能为网站运营带来了极大的灵活性,它允许我们根据业务的实际需要,来定义各种个性化的内容结构。无论是文章、产品、活动,还是其他任何自定义类型的内容,我们都可以为其添加独特的字段。那么,如何在网站前端模板中灵活地展示这些内容模型中的自定义字段呢?接下来,让我们一起探索这个实用的技巧。
理解 AnQiCMS 的内容模型与自定义字段
在使用 AnQiCMS 进行内容创作时,我们不仅仅局限于文章标题和正文这类基础字段。通过内容模型功能,我们可以为不同类型的内容创建专属的数据字段。例如,如果你的网站需要展示产品信息,你可能会为“产品模型”添加“产品型号”、“产品颜色”、“库存数量”、“产品详情图集”等自定义字段。这些字段让你的内容更具结构化,也方便用户快速获取所需信息。
这些自定义字段的设置,通常是在 AnQiCMS 后台的“内容管理”下找到“内容模型”功能。在这里,你可以选择编辑现有的模型(如“文章模型”或“产品模型”),或者创建全新的内容模型。在模型编辑界面,你会看到一个“内容模型自定义字段”的区域。在这里,我们可以添加新字段,并为它们指定“参数名”(供后台显示)、“调用字段”(供前端模板调用,建议使用英文字母小写且唯一)、“字段类型”(如单行文本、数字、多行文本、单项选择、多项选择、下拉选择等),以及是否必填和默认值。
举个例子,假设我们为“产品模型”添加了一个名为“产品型号”的自定义字段,它的“调用字段”设置为 model_number。同时,我们可能还添加了一个“产品亮点”字段,其“调用字段”为 highlights,字段类型为“多行文本”,用于描述产品的特色优势。
在前端模板中显示自定义字段内容
AnQiCMS 的前端模板使用类似 Django 的语法,变量通过双花括号 {{ }} 来输出,而标签则使用 {% %} 包裹。当我们需要在模板中展示内容模型的自定义字段时,主要会用到 archiveDetail、categoryDetail 或 pageDetail 等详情标签,以及 archiveParams 标签。
1. 显示单个自定义字段内容
如果你明确知道要显示哪个自定义字段,并且它通常是单行文本或数字这类简单数据,你可以直接使用 archiveDetail 标签(在文档详情页)、categoryDetail 标签(在分类详情页)或 pageDetail 标签(在单页详情页)来调用。
例如,在产品详情页,我们想要显示产品的型号 (model_number):
<p>产品型号:{% archiveDetail with name="model_number" %}</p>
如果你希望将这个值赋值给一个变量再使用,也可以这样做:
{% archiveDetail productModelNumber with name="model_number" %}
<p>产品型号:{{ productModelNumber }}</p>
这种方法简洁明了,适用于我们已知自定义字段名称的场景。
2. 处理包含多项或富文本内容的自定义字段
有些自定义字段的类型可能是多选、组图,或者像“产品亮点”这样的富文本内容。这些字段的数据通常以数组或带有 HTML 结构的形式存储,我们需要特别处理。
多值字段(例如:产品图集、多项选择):
如果你的自定义字段(如 product_images)存储的是一组图片或多项选择的值,它在模板中会是一个数组。你需要结合 for 循环来遍历并显示它们。
{% archiveDetail productImages with name="product_images" %}
<div class="product-gallery">
{% for image in productImages %}
<img src="{{ image }}" alt="产品图片">
{% endfor %}
</div>
富文本或 Markdown 内容:
当自定义字段类型为多行文本编辑器(通常支持富文本编辑或 Markdown 格式)时,其内容可能包含 HTML 标签。为了确保这些内容能被浏览器正确解析并显示样式,我们需要使用 |safe 过滤器。如果后台内容设置中启用了 Markdown 编辑器,并且字段内容是 Markdown 格式,则需要先用 |render 过滤器将其转换为 HTML,再用 |safe 过滤器。
例如,显示“产品亮点” (highlights) 字段的内容:
{# 假设 highlights 是富文本内容 #}
<div class="product-highlights">
{{ archiveDetail with name="highlights" | safe }}
</div>
{# 假设 highlights 是 Markdown 内容,且后台启用了 Markdown 编辑器 #}
<div class="product-highlights">
{{ archiveDetail with name="highlights" | render | safe }}
</div>
小提示: 当你在列表页(如 archiveList 循环内部)需要显示自定义字段时,你可以直接通过 item.自定义字段名 来访问,例如 {{ item.model_number }}。
3. 动态遍历显示所有自定义字段
如果你希望在模板中不预设自定义字段的名称,而是动态地显示一个内容模型下的所有自定义字段及其值(例如,在产品参数区域),archiveParams 标签会非常有用。它会返回一个自定义字段的列表,你可以通过 for 循环来遍历它们。
<div class="product-parameters">
<h3>产品参数</h3>
{% archiveParams params %}
{% for item in params %}
<p>
<span>{{ item.Name }}:</span> <!-- 自定义字段的显示名称 -->
<span>{{ item.Value }}</span> <!-- 自定义字段的值 -->
</p>
{% endfor %}
{% endarchiveParams %}
</div>
这里 item.Name 会显示你在后台设置的“参数名”(例如“产品型号”),而 item.Value 则显示该字段所填写的内容。这对于构建灵活的产品参数表格或信息块特别方便。
如果某个 item.Value 字段包含 HTML 或 Markdown 内容,别忘了加上 |safe 或 |render|safe 过滤器。
4. 其他内容模型的自定义字段调用
除了文档模型,分类模型和单页面也可以拥有自定义字段。调用方式与文档模型类似,只需将标签名称替换为 categoryDetail 或 pageDetail 即可。
例如,在分类详情页显示分类的自定义“特色描述”字段(调用字段名为 feature_desc):
<div class="category-feature">
<h4>特色描述</h4>
{{ categoryDetail with name="feature_desc" | safe }}
</div>
实践建议
- 命名规范: 在后台设置自定义字段时,“调用字段”