在安企CMS中,内容模型的灵活性是其突出优势之一。许多时候,我们不仅需要在文档详情页展示丰富的内容,还希望在文档列表页一眼就能看到关键的自定义信息,比如产品的型号、文章的作者、房产的价格、车辆的里程数等。这些信息往往是用户快速筛选和了解内容的重要依据。本文将详细讲解如何在安企CMS的文档列表中,巧妙地显示这些自定义的模型字段信息。
灵活定制:理解安企CMS的内容模型
安企CMS允许我们根据实际业务需求,创建各种各样的内容模型。例如,除了系统内置的文章和产品模型外,我们还可以创建像“新闻”、“案例”、“招聘”等模型。每个模型都可以拥有自己独特的一套字段,这些字段共同定义了该模型的结构和内容。
自定义字段是内容模型的灵魂。它们可以是简单的文本输入框,也可以是数字、多行文本、单选、多选甚至文件上传等多种类型。通过这些自定义字段,我们可以为内容添加更加具体和个性化的属性,从而更好地管理和展示我们的网站内容。
第一步:在后台定义自定义字段
要让自定义字段在文档列表中显示,首先我们需要确保这些字段已经在安企CMS后台的内容模型中被定义。
- 进入内容模型管理:登录安企CMS后台,导航至“内容管理” -> “内容模型”。
- 选择或创建模型:选择你想要添加自定义字段的模型(例如“文章模型”或“产品模型”),或者创建一个全新的内容模型。
- 添加自定义字段:在模型编辑页面,找到“内容模型自定义字段”区域。点击“添加字段”,为你的模型添加所需的自定义信息。
- 参数名:这是字段在后台管理界面显示的名称,通常是中文,易于理解(例如“产品型号”、“文章作者”)。
- 调用字段:这是在模板中用于调用该字段的唯一标识,必须是英文字母。这是我们在前端模板中引用该字段的关键(例如“model_number”、“author_name”)。
- 字段类型:根据你希望存储的数据类型选择,如“单行文本”、“数字”、“多行文本”等。
- 是否必填:根据需求设置。
- 默认值:可以预设一个值,用户在发布内容时如果没有填写,就会自动应用该默认值。
- 保存模型:完成字段添加后,务必保存内容模型的更改。
完成这一步后,你在发布对应模型下的文档时,就会看到这些新增的自定义字段,并可以为它们填写内容。
第二步:修改模板,在列表页调用自定义字段
在安企CMS中,网站页面的呈现是由模板文件决定的。要在文档列表中显示自定义字段,我们需要修改对应列表页的模板文件。
安企CMS的模板遵循类似Django模板引擎的语法,变量使用双花括号 {{变量}},逻辑控制使用 {% 标签 %}。模板文件通常存放在 /template 目录下,并按照一定的目录结构组织(例如 {模型table}/list.html 用于列表页)。
我们将主要使用 archiveList 标签来获取文档列表,并在循环中结合 archiveParams 标签来获取每个文档的自定义字段。
定位列表页模板文件:
- 假设你要在文章列表页显示自定义字段,你需要找到对应的文章列表模板,通常是
template/你的模板名称/article/list.html或template/你的模板名称/archive/list.html。 - 如果你不确定具体是哪个文件,可以参考“模板制作的目录和模板”文档中关于“文档列表页”的命名约定。
- 假设你要在文章列表页显示自定义字段,你需要找到对应的文章列表模板,通常是
获取文档列表: 在列表模板中,通常会有一个
archiveList标签来循环展示文档:{% archiveList archives with type="page" limit="10" %} {% for item in archives %} {# 这里是每个文档的显示区域 #} <a href="{{item.Link}}"> <h5>{{item.Title}}</h5> <div>{{item.Description}}</div> {# ... 其他内置字段 ... #} </a> {% empty %} <p>目前没有文档。</p> {% endfor %} {% endarchiveList %}item代表循环中的每一个文档对象,我们可以通过item.Title、item.Link等方式直接获取文档的内置字段。调用自定义模型字段: 自定义模型字段并不直接包含在
item对象中。我们需要在for循环内部,针对每个文档,使用archiveParams标签来获取其自定义字段。archiveParams标签需要传入当前文档的ID来获取对应的字段信息。{% archiveList archives with type="page" limit="10" %} {% for item in archives %} <div class="document-item"> <a href="{{item.Link}}"> <h3>{{item.Title}}</h3> <p>{{item.Description}}</p> {# 显示自定义字段区域 #} <div class="custom-fields"> {% archiveParams params with id=item.Id %} {% for field in params %} {# field.Name 是后台设置的“参数名”(中文) #} {# field.Value 是该字段的具体内容 #} <p><strong>{{field.Name}}:</strong> {{field.Value}}</p> {% endfor %} {% endarchiveParams %} </div> </a> </div> {% empty %} <p>目前没有文档。</p> {% endfor %} {% endarchiveList %}在上面的代码中,我们通过
{% archiveParams params with id=item.Id %}获取了当前item(文档)的所有自定义字段,并将它们存储在params变量中。然后,我们再次使用for循环遍历params变量,就能显示每个自定义字段的名称和值了。按需显示特定自定义字段: 如果你只关心某个特定的自定义字段,并且知道它的“调用字段”名称(例如我们之前定义的
author_name),你也可以直接通过archiveDetail标签来获取:{% archiveList archives with type="page" limit="10" %} {% for item in archives %} <div class="document-item"> <a href="{{item.Link}}"> <h3>{{item.Title}}</h3> <p>{{item.Description}}</p> {# 显示特定的自定义字段,例如“文章作者” #} <p> <strong>作者:</strong> {% archiveDetail with name="author_name" id=item.Id %} </p> </a> </div> {% empty %} <p>目前没有文档。</p> {% endfor %} {% endarchiveList %}这种方式在只显示少量且固定的自定义字段时更为简洁。
注意事项
- 清除缓存:修改模板文件后,可能需要登录安企CMS后台,点击“更新缓存”按钮,才能让修改生效。
- 字段类型处理:
- 多行文本(富文本):如果自定义字段是多行文本或富文本编辑器类型,其内容可能包含HTML标签。在输出时,需要使用
|safe过滤器来确保HTML被正确解析而不是作为纯文本显示,例如{{field.Value|safe}}。 - 图片类型:如果自定义字段是图片上传类型,其
field.Value存储的是图片URL。在显示时,你需要将其包裹在<img>标签中:<img src="{{field.Value}}" alt="{{item.Title}}">。如果需要显示缩略图,可以使用thumb过滤器:<img src="{{field.Value|thumb}}" alt="{{item.Title}}">。 - 多选/下拉选择:这些字段的值可能是一个数组或逗号分隔的字符串。根据实际存储格式,你可能需要进一步处理(例如使用
split过滤器将字符串分割成数组,然后循环遍历显示)。
- 多行文本(富文本):如果自定义字段是多行文本或富文本编辑器类型,其内容可能包含HTML标签。在输出时,需要使用
- 调用字段名准确性:务必使用在后台设置的“调用字段”名称(英文字母),而不是“参数名”(中文),并且注意大小写。
通过以上步骤和注意事项,你可以灵活地在安企CMS的文档列表中展示各种自定义的模型字段信息,从而大大提升网站内容的管理效率和用户体验。
常见问题 (FAQ)
1. 我在后台添加了自定义字段并修改了列表模板,但前端页面没有显示,是哪里出了问题? 首先请确保你在后台修改内容模型后点击了“保存”,并且确认你在模板中使用了正确的“调用字段”名称(而非“参数名”)。同时,最重要的一个步骤是,登录安企CMS后台,点击左侧导航栏最下方的“更新缓存”按钮,清理系统缓存,这样模板修改才能及时生效。
2. 我的自定义字段是图片类型,为什么在列表页显示的是图片链接而不是图片本身?
图片类型的自定义字段,其值通常是图片的URL地址。在模板中,你需要将这个URL放到 <img> 标签的 src 属性中才能显示图片。例如:<img src="{{field.Value}}" alt="{{item.Title}}">。如果你想显示缩略图,还可以使用 {{field.Value|thumb}} 过滤器。
3. 如果我的自定义字段是多选类型,在列表页如何显示多个被选中的值?
多选字段的值通常会以逗号等分隔符存储在一个字符串中。你可以在模板中使用 split 过滤器将其分割成一个数组,然后通过 for 循环遍历显示每一个选项。例如:{% for option in field.Value|split:"," %} <span>{{option}}</span> {% endfor %}。具体的分隔符需要根据你后台设置的默认值格式来确定。