在安企CMS中,要获取并展示当前文章的详细内容,主要围绕模板文件的组织和内置的模板标签展开。理解这些核心机制,就能灵活地控制文章在前端页面的呈现方式。
核心概念:文章详情页面的构成
在安企CMS中,每篇文章的详细内容通常通过一个特定的模板文件来展示。这个模板文件会根据文章所属的内容模型(例如“文章模型”或“产品模型”)以及在后台的设置,自动或手动地被系统调用。默认情况下,安企CMS会查找 template/{你的模板目录}/{模型table}/detail.html 这样的路径来渲染文章详情页。例如,如果你的文章属于“文章模型”(默认的 table 名称可能是 archive),那么系统会尝试加载 template/{你的模板目录}/archive/detail.html 文件。
在这个详情页模板中,我们需要使用安企CMS提供的强大模板标签来“抓取”文章的各项数据,并按照设计进行布局显示。其中,archiveDetail 标签是获取文章详细信息的核心。
深入理解 archiveDetail 标签
archiveDetail 标签专门用于从数据库中提取单篇文章的详细数据。它的基本用法是 {% archiveDetail 变量名称 with name="字段名称" %}。
获取当前文章数据 当你在文章详情页(例如
archive/detail.html)中使用archiveDetail标签时,通常不需要指定文章的ID。系统会智能地识别当前正在访问的文章,并自动获取其数据。例如,要获取当前文章的标题,你只需这样写:{% archiveDetail with name="Title" %}通过
name参数指定要获取的字段archiveDetail标签通过name参数来指定你希望获取文章的哪个具体字段。这些字段包括文章的基础信息、SEO信息、内容本身,以及通过内容模型自定义的字段。以下是一些常用的字段及其应用:
文章标题 (
Title):{% archiveDetail with name="Title" %}这会直接输出文章的标题。文章内容 (
Content):{% archiveDetail with name="Content" %}这是文章页面的主体部分。需要注意的是,如果文章内容包含HTML标签(如图片、链接、格式化文本等),为了确保这些HTML代码能被浏览器正确解析而不是作为纯文本显示,通常需要配合|safe过滤器使用。如果文章是使用Markdown编写的,并且你在后台启用了Markdown编辑器,安企CMS会自动将其转换为HTML;如果需要手动控制,可以在标签中添加render=true或render=false参数。 示例:{% archiveDetail articleContent with name="Content" %}{{articleContent|safe}}{% endarchiveDetail %}发布时间 (
CreatedTime) 和更新时间 (UpdatedTime): 这些字段返回的是时间戳,为了在页面上以可读的日期格式显示,需要使用stampToDate格式化时间戳标签。 示例:{{ stampToDate(archive.CreatedTime, "2006-01-02 15:04") }}(其中archive是通过archiveDetail标签定义的变量名,2006-01-02 15:04是Go语言的时间格式化标准。)文章链接 (
Link)、关键词 (Keywords)、描述 (Description)、浏览量 (Views): 这些字段的获取方式类似Title。 示例:{% archiveDetail with name="Link" %}{% archiveDetail with name="Keywords" %}{% archiveDetail with name="Description" %}{% archiveDetail with name="Views" %}封面图片 (
Logo、Thumb、Images):Logo通常指文章的单张主图或大图,Thumb是其缩略图。Images则可能是一个图片组(多张图片)。 示例:<img src="{% archiveDetail with name="Logo" %}" alt="{% archiveDetail with name="Title" %}" />如果有多张图片,需要将其定义为变量并进行循环:{% archiveDetail archiveImages with name="Images" %}{% for img in archiveImages %}<img src="{{img}}" alt="文章图片" />{% endfor %}{% endarchiveDetail %}所属分类 (
Category): 这个字段可以获取文章所属分类的详细信息。如果需要显示分类名称或链接,可以将其定义为变量,然后访问其属性,或者直接使用categoryDetail标签获取。 示例:{% archiveDetail currentCategory with name="Category" %}<a href="{{ currentCategory.Link }}">{{ currentCategory.Title }}</a>{% endarchiveDetail %}Tag标签 (
tagList): 文章的Tag标签通常不是archiveDetail的直接属性,而是通过tagList标签来获取。你可以在archiveDetail的上下文中调用tagList,并指定itemId为当前文章的ID。 示例:{% tagList tags with itemId=archive.Id %}{% for tag in tags %}<a href="{{ tag.Link }}">{{ tag.Title }}</a>{% endfor %}{% endtagList %}自定义字段 (
archiveParams或直接按名称获取): 安企CMS支持为内容模型定义额外的自定义字段。这些字段可以通过两种方式在模板中获取:- 直接按字段名获取:如果自定义字段的调用字段名是
author,则可以直接{% archiveDetail with name="author" %}。 - 循环所有自定义字段:使用
archiveParams标签来遍历所有自定义字段,这对于不确定字段名称或需要统一展示时很有用。{% archiveParams params %}{% for item in params %}<span>{{ item.Name }}:{{ item.Value }}</span>{% endfor %}{% endarchiveParams %}
- 直接按字段名获取:如果自定义字段的调用字段名是
逐步构建文章详情页面
了解了核心标签后,我们可以按照以下步骤来构建一个功能完善的文章详情页:
确定模板文件位置 首先,你需要找到或创建你的文章详情页模板文件。例如,如果是文章模型,通常会在
template/你的模板名称/archive/detail.html。获取并展示基本文章信息 在
detail.html文件中,你可以先放置文章标题和主要内容。<h1>{% archiveDetail with name="Title" %}</h1> <div class="article-content"> {% archiveDetail articleContent with name="Content" %}{{ articleContent|safe }}{% endarchiveDetail %} </div>展示辅助信息 接着,添加发布日期、浏览量、所属分类和Tag标签等辅助信息。
<div class="article-meta"> <span>发布日期:{{ stampToDate(archive.CreatedTime, "2006-01-02") }}</span> <span>浏览量:{% archiveDetail with name="Views" %}</span> <span>所属分类: {% archiveDetail currentCategory with name="Category" %}<a href="{{ currentCategory.Link }}">{{ currentCategory.Title }}</a>{% endarchiveDetail %} </span> <span>标签: {% tagList tags with itemId=archive.Id %}{% for tag in tags %}<a href="{{ tag.Link }}">{{ tag.Title }}</a>{% endfor %}{% endtagList %} </span> </div>(注意:
archive.CreatedTime这里的archive是一个假设的变量名,如果你没有通过with参数将archiveDetail的结果赋值给archive