在网站运营中,文章详情页不仅仅是展示核心内容的场所,更是传递额外信息、提升专业度和用户体验的关键。除了标题和正文,我们常常需要在文章详情页中展示一些自定义字段,比如作者、来源、发布机构、产品型号等。这些信息不仅能丰富文章内容,也有助于提升网站的权威性、可信度,甚至对SEO优化和用户决策产生积极影响。
安企CMS(AnQiCMS)以其灵活的内容模型设计,让这类自定义字段的显示变得非常直观和强大。无论你的网站是企业官网、自媒体博客,还是电商产品展示,都能轻松实现个性化的内容展示需求。
灵活定义你的自定义字段
在安企CMS中,要显示自定义字段,首先得在后台将它们定义出来。这得益于安企CMS提供的“灵活的内容模型”功能。你可以根据不同的内容类型(比如文章、产品、活动等)创建或修改对应的内容模型。
进入后台,找到“内容管理”下的“内容模型”选项。在这里,你可以选择现有的模型进行编辑,或者创建新的模型。在模型编辑页面,你会看到一个“内容模型自定义字段”区域。这里就是我们添加个性化字段的地方。
添加自定义字段时,你可以设置“参数名”(这是显示给后台编辑人员看的中文名称,比如“文章作者”),以及“调用字段”(这是在模板中调用时使用的英文名称,比如author)。更棒的是,安企CMS支持多种字段类型,如单行文本、数字、多行文本、单项选择、多项选择和下拉选择。这些丰富的选择能满足你几乎所有内容结构的需求。例如,“作者”通常会选择“单行文本”,“文章来源”也是如此。如果需要展示一些复杂的描述,比如产品特性,可以选择“多行文本”甚至启用Markdown编辑器来提供更丰富的格式。
准备文章详情页模板
一旦自定义字段在后台定义并填写好内容,下一步就是让它们在网站前台的文章详情页上呈现出来。安企CMS的模板文件通常存放在/template目录下,而文章详情页的模板通常命名为{模型table}/detail.html。
安企CMS的模板语法借鉴了Django的模板引擎,使用双花括号{{变量}}来输出变量内容,使用单花括号和百分号{% 标签 %}来处理逻辑和调用数据。理解了这些基本规则,我们就能轻松地将自定义字段嵌入到页面中。
如何在文章详情页显示自定义字段
在文章详情页的模板中,我们主要会用到两个强大的标签来获取文章相关数据:archiveDetail和archiveParams。
直接调用已知名称的自定义字段
如果你的自定义字段在创建时已经设定了明确的“调用字段”名称(例如author、source),那么在模板中直接通过archiveDetail标签或者通过当前文档对象archive来调用是最直接的方式。
假设你在后台为“文章模型”添加了两个自定义字段,它们的“调用字段”分别是author(作者)和source(来源),并且你在发布文章时都填入了内容。那么在detail.html模板中,你可以这样展示它们:
<article>
<h1>{{archive.Title}}</h1> {# 这是文章的默认标题 #}
<div class="article-meta">
<span>发布时间:{{stampToDate(archive.CreatedTime, "2006-01-02")}}</span>
<span>浏览量:{{archive.Views}}</span>
{# 直接调用自定义字段:作者 #}
{% if archive.author %}
<span>作者:{% archiveDetail with name="author" %}</span>
{% endif %}
{# 直接调用自定义字段:来源 #}
{% if archive.source %}
<span>来源:{% archiveDetail with name="source" %}</span>
{% endif %}
</div>
<div class="article-content">
{%- archiveDetail articleContent with name="Content" %}
{{articleContent|safe}} {# 文章内容通常包含HTML,需要使用|safe过滤器 #}
</div>
</article>
你也可以更简洁地通过archive对象直接访问自定义字段,效果是相同的:
<article>
<h1>{{archive.Title}}</h1>
<div class="article-meta">
<span>发布时间:{{stampToDate(archive.CreatedTime, "2006-01-02")}}</span>
<span>浏览量:{{archive.Views}}</span>
{% if archive.author %}
<span>作者:{{archive.author}}</span>
{% endif %}
{% if archive.source %}
<span>来源:{{archive.source}}</span>
{% endif %}
</div>
<div class="article-content">
{{archive.Content|safe}}
</div>
</article>
这里我们还添加了一个{% if archive.author %}的判断,这是个好习惯,因为并非所有文章都会填写所有自定义字段,这样可以避免字段为空时显示不必要的标签。
如果你的自定义字段是“多行文本”类型,并且你在后台内容模型中将其设置为支持Markdown编辑,那么在模板中显示时,为了确保Markdown格式能够正确渲染成HTML,你需要使用|render|safe过滤器。例如:{{archive.custom_markdown_field|render|safe}}。如果只是简单的HTML富文本内容,|safe就足够了。
遍历所有自定义字段(适用于动态显示或不确定字段名)
在某些场景下,你可能希望以列表的形式动态展示文章的所有自定义参数,例如一个产品详情页中的“产品参数”列表,你可能不提前知道会有哪些参数。这时,archiveParams标签就显得非常方便了。
archiveParams标签可以获取当前文章(或指定ID的文章)的所有自定义字段及其值,并以一个可遍历的数组对象形式返回。
<article>
<h1>{{archive.Title}}</h1>
{# ... 文章元信息 ... #}
<div class="article-params">
<h3>其他参数</h3>
<ul>
{% archiveParams params %} {# params将是一个包含所有自定义字段的数组 #}
{% for item in params %}
<li>
<span>{{item.Name}}:</span> {# item.Name是自定义字段的中文参数名 #}
<span>{{item.Value}}</span> {# item.Value是自定义字段的值 #}
</li>
{% endfor %}
{% endarchiveParams %}
</ul>
</div>
<div class="article-content">
{{archive.Content|safe}}
</div>
</article>
通过{% for item in params %}循环,你可以逐一展示每个自定义字段的名称和值。这种方式非常灵活,即使后台内容模型增加了新的自定义字段,前端也能自动显示出来,无需修改模板代码。
如果你只想显示部分自定义字段,或者需要对某些字段进行特殊处理,可以在循环中添加条件判断:
<div class="article-params">
<h3>其他参数</h3>
<ul>
{% archiveParams params %}
{% for item in params %}
{# 假设我们不想显示“内部备注”这个字段 #}
{% if item.Name != '内部备注' %}
<li>
<span>{{item.Name}}:</span>
<span>{{item.Value}}</span>
</li>
{% endif %}
{% endfor %}
{% endarchiveParams %}
</ul>
</div>
总结
安企CMS通过其灵活的内容模型和直观的模板标签,让在文章详情页显示自定义字段变得非常简单。无论是直接引用特定字段,还是动态遍历所有参数,你都能找到适合的实现方式。合理运用这些功能,不仅能够极大地丰富你的网站内容,也能为访问者提供更全面、更专业的阅读体验。
常见问题 (FAQ)
1. 我在后台添加了自定义字段并填写了内容,为什么前台文章详情页没有显示?
首先,请确保你的自定义字段在“内容模型”中已经正确定义,并且“调用字段”的名称没有拼写错误。其次,确认你已经在文章详情页的模板(通常是{模型table}/detail.html)中使用了正确的模板标签来调用这些字段,比如{% archiveDetail with name="你的调用字段名" %}或者{{archive.你的调用字段名}}。如果字段内容可能为空,记得添加{% if ... %}判断,防止不显示。最后,检查是否清除了系统缓存,有时修改模板或后台设置后,需要刷新缓存才能在前台看到变化。
2. 自定义字段有哪些类型?不同类型在模板中显示时有什么区别?
安企CMS支持多种自定义字段类型,包括单行文本、数字、多行文本、单项选择、多项选择和下拉选择。
- 单行文本/数字:直接输出其值即可。
- 多行文本:如果包含换行符或HTML内容,建议使用
|safe过滤器以正确渲染格式。如果后台开启了Markdown编辑器并使用了Markdown格式,则需要|render|safe过滤器。 - 单项选择/多项选择/下拉选择:这些字段的值通常是用户选择的文本,可以直接输出。如果是多选类型,输出时可能是一个包含多个值的字符串或数组,需要根据实际输出格式进行处理,例如用
|join过滤器将数组元素拼接成字符串。
3. 如何让我的自定义字段内容像文章正文一样支持富文本编辑器或者Markdown格式?
在后台“内容模型”中添加或编辑自定义字段时,你可以为“多行文本”类型的字段选择是否启用富文本编辑器或Markdown编辑器。启用后,后台编辑时该字段将具备相应的编辑功能。在前端模板中显示此类自定义字段的内容时,为了正确解析和渲染这些格式,你需要使用|safe过滤器(针对HTML富文本内容)或|render|safe过滤器(针对Markdown内容),