在安企CMS的模板开发实践中,{% diy %}标签的使用频率颇高,它为网站运营者提供了极大的灵活性,能够自定义并调用后台配置的各项信息。然而,关于它是否能够精确地调用“仅针对文章模块”这样的特定内容模型的自定义配置,许多开发者可能会感到困惑。今天,作为一位资深的网站运营专家,我将基于安企CMS的文档,为您深度解析这一机制,并指导您如何在不同场景下正确运用模板标签。

安企CMS的配置体系:理解全局与局部的界限

要理解{% diy %}标签的能力范围,我们首先需要对安企CMS的配置体系有一个清晰的认识。安企CMS在设计上,将网站的配置信息进行了逻辑上的划分,主要可以归结为两类:

  1. 全局自定义配置: 这些配置通常是网站范围内的通用设置,不依附于某个特定的内容类型。例如,您在后台的“全局功能设置”中自定义的“备案号”、“网站名称”等,或者在“联系方式设置”中添加的“WhatsApp联系方式”等。这些信息无论您访问的是文章详情页、产品列表页还是单页面,它们都是统一且可调用的。 {% diy %}标签正是为此类全局自定义配置而生。它能够让您方便地在模板中调用这些在后台灵活添加的全局参数。例如,如果您在后台自定义了一个名为“Author”的全局参数,您就可以在模板中通过{% diy with name="Author" %}来获取其值。

  2. 内容模型自定义字段: 与全局配置不同,内容模型自定义字段是针对特定内容类型(如文章、产品)的定制化扩展。安企CMS的核心亮点之一便是其“灵活的内容模型”功能,允许用户根据业务需求自定义内容模型,并为每个模型添加独有的字段。 例如,对于“文章模型”,您可能希望有“文章作者”、“来源”、“推荐指数”等字段;而对于“产品模型”,则可能需要“产品价格”、“库存”、“型号”等。这些字段是内容项自身的属性,它们只存在于该内容模型下的具体文档中,而不是网站的全局设置。文档中明确提到:“在这里你可以给内容模型设置只有该模型才有的字段。”

{% diy %}标签为何不直接调用模块自定义配置?

现在我们回到核心问题:{% diy %}标签是否能用于调用特定模块的自定义配置,例如仅针对文章模块?

答案是:不能直接用于调用特定模块(如文章模块)的自定义字段配置。

这并非{% diy %}标签功能上的缺失,而是其设计定位的体现。{% diy %}标签的职责是获取后台“自定义内容”区域定义的全局性键值对数据。它不具备上下文感知能力,无法自动识别当前页面所关联的内容模型(例如文章模型),进而去读取该模型下的某个特定自定义字段。

想象一下,{% diy %}就像一个询问“网站现在叫什么名字?”的通用机器人,它能准确回答出“安企CMS”,但如果您问它“这篇文章的作者是谁?”,它会说“我不知道,这不是我负责的信息范围。”因为文章作者这个信息是属于那篇文章本身的,而不是网站的全局设定。

如何正确调用文章模块的自定义配置?

那么,如果我们需要在文章详情页中显示该文章独有的自定义字段,比如“文章来源”或“作者”,我们应该使用哪个标签呢?

安企CMS为此提供了更具上下文感知能力的专用标签:{% archiveDetail %}{% archiveParams %}

  1. 使用{% archiveDetail %}调用单个自定义字段: 当您知道某个文章(或产品)模型有一个特定的自定义字段,并且希望直接获取其值时,{% archiveDetail %}标签是理想选择。文档中提到,“文档模型设置的其他字段参数”可以通过{% archiveDetail with name="字段名称" %}的方式调用。 例如,如果您在文章模型中定义了一个名为author的自定义字段,您可以在文章详情模板中这样调用:

    <p>文章作者:{% archiveDetail with name="author" %}</p>
    

    或者,如果您想将值赋给一个变量再使用:

    {% archiveDetail articleAuthor with name="author" %}
    <p>文章作者:{{ articleAuthor }}</p>
    

    这样,在每篇文章的详情页,都会显示该文章所填写的作者信息。

  2. 使用{% archiveParams %}遍历所有自定义字段: 有时,您可能希望将一篇文章(或产品)的所有自定义字段都遍历展示出来,或者根据字段的类型进行不同的渲染。这时,{% archiveParams %}标签就派上了用场。它会返回一个包含所有自定义参数的数组对象,您可以对其进行循环处理。 例如,在文章详情页,您可以这样展示所有的自定义参数:

    <h3>文章参数详情:</h3>
    {% archiveParams params %}
        <ul>
        {% for item in params %}
            <li>{{ item.Name }}:{{ item.Value }}</li>
        {% endfor %}
        </ul>
    {% endarchiveParams %}
    

    这段代码会动态地列出该文章所有自定义字段的名称和值,无需您预先知道所有字段名。

实用场景示例

为了更直观地理解,我们来看几个简单的例子:

场景一:调用网站全局的联系方式(例如QQ号) 假设您在后台“联系方式设置”的“自定义设置参数”中添加了一个名为“QQ”的参数,值为“123456789”。 您可以在网站的任何页面(包括文章详情页)这样调用:

<p>我们的客服QQ:{% diy with name="QQ" %}</p>

这里使用{% diy %}标签是正确的,因为它获取的是全局性的自定义联系方式。

场景二:调用文章模型特有的“来源”字段 假设您在“内容模型”中为“文章模型”添加了一个名为“source”(来源)的自定义字段。 在文章详情页的模板中,您需要这样调用:

<p>文章来源:{% archiveDetail with name="source" %}</p>

这里不能使用{% diy %},因为它无法感知source是当前文章的特定字段。

总结

安企CMS在设计其模板标签时,充分考虑了配置信息的不同层级和使用场景。{% diy %}标签是您获取全局自定义配置的利器,适用于那些与具体内容类型无关的网站级设置。而当您需要深入到文章、产品等内容模型特有的自定义字段时,{% archiveDetail %}{% archiveParams %}标签才是您的**选择。

理解这些标签的职责范围,将帮助您更高效、更准确地利用安企CMS的强大功能,构建出结构清晰、易于维护的网站。


常见问题 (FAQ)

  1. Q: {% diy %}标签和{% system %}标签有什么区别? A: {% system %}标签主要用于调用安企CMS内置的、系统级别的全局配置,如SiteName(网站名称)、SiteLogo(网站Logo)等。而{% diy %}标签则用于调用您在后台“全局功能设置”或“联系方式设置”等模块的“自定义设置参数”中,自行添加的自定义全局键值对信息。可以说,{% system %}是调用固定项,{% diy %}是调用您扩展的全局项。

  2. Q: 我能否在一个循环中,使用{% archiveDetail %}直接调用所有文章的自定义字段? A: {% archiveDetail %}标签主要用于获取单个内容项的特定字段,如果您想在{% archiveList %}循环中获取每篇文章的自定义字段,有两种常见方法:

    • 在循环内针对已知自定义字段逐一调用,例如{% for item in archives %}<p>{{ item.Title }} - 作者: {% archiveDetail with name="author" id=item.Id %}</p>{% endfor %}
    • 更推荐的方式是,在{% archiveList %}循环的item变量中,自定义字段通常会直接作为其属性存在,您可以直接使用{{ item.自定义字段名 }}来调用,例如{{ item.author }}。若字段较多且需统一处理,也可在循环内通过{% archiveParams params with id=item.Id %}来获取当前item的所有自定义参数列表并进行遍历。
  3. Q: {% diy %}标签是否可以调用其他站点的全局配置? A: 是的,{% diy %}标签支持siteId参数。如果您在安企CMS后台启用了多站点管理功能,并且希望在当前站点的模板中调用其他站点的全局自定义配置,可以通过指定siteId参数