AnqiCMS模板中的常用标签(如`system`、`archiveList`)如何使用?

作为一名资深的安企CMS网站运营人员,我深知内容创作与管理的每一个环节都离不开灵活高效的模板系统。安企CMS凭借其简洁的设计和强大的功能,为我们提供了极大的便利。在模板设计中,熟练运用各种内置标签是构建高质量、用户友好型网站的关键。今天,我将为大家详细解析AnqiCMS模板中两个最常用且功能强大的标签:systemarchiveList,以及它们如何帮助我们实现丰富多样的内容展示。


驾驭内容展示:深入解析AnqiCMS模板中的常用标签

AnqiCMS采用类似Django模板引擎的语法,使得模板制作过程直观且易于上手。变量通过双花括号 {{变量}} 定义,而条件判断和循环控制等标签则使用单花括号和百分号 {% 标签 %},并需以结束标签 {% end标签 %} 成对出现。理解这些基本规则,是高效利用AnqiCMS模板标签的前提。

获取系统全局配置:system 标签的运用

system 标签是我们在AnqiCMS模板中获取网站全局配置信息的利器。它允许我们轻松调取后台“全局功能设置”中配置的网站名称、Logo、备案号、版权信息等核心数据,甚至包括我们自定义的全局参数。这使得我们可以在网站的任何页面,尤其是通用的页眉和页脚部分,动态展示这些信息,避免了硬编码带来的维护不便。

system 标签的基本使用格式是 {% system 变量名称 with name="字段名称" %}。其中,“变量名称”是可选的,如果设置,我们可以通过该变量来引用获取到的数据;如果不设置,则标签会直接输出字段的值。

该标签支持一个关键参数 siteId。在AnqiCMS支持多站点管理的环境下,如果我们需要获取特定站点的系统配置,可以通过 siteId 参数指定,但通常情况下,它会自动获取当前站点的配置,无需额外设置。

可用的字段名称涵盖了网站的方方面面:

  • SiteName:网站名称
  • SiteLogo:网站Logo图片地址
  • SiteIcp:网站备案号
  • SiteCopyright:版权内容
  • BaseUrl:网站首页地址
  • MobileUrl:网站手机端地址
  • TemplateUrl:模板静态文件地址(CSS、JS、图片等)
  • TemplateName:当前使用的模板目录名
  • SiteCloseTips:网站闭站提示内容
  • Language:站点语言
  • 以及所有在后台“全局功能设置”中自定义的参数名。

例如,要在页眉部分显示网站Logo并链接到首页,同时在页脚显示备案号和版权信息,我们可以这样编写模板代码:

{# 页面头部示例 #}
<header>
    <a href="{% system with name="BaseUrl" %}">
        <img src="{% system with name="SiteLogo" %}" alt="{% system with name="SiteName" %}" />
    </a>
    <nav>
        {# 导航列表通常会使用 navList 标签,此处省略 #}
    </nav>
</header>

{# 页面底部示例 #}
<footer>
    <p>
        <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">{% system with name="SiteIcp" %}</a>
        &copy; {% now "2006" %} {% system with name="SiteCopyright" %}
    </p>
    <p>Powered by <a href="https://www.anqicms.com" target="_blank">AnQiCMS</a></p>
</footer>

通过上述代码,无论是网站名称、Logo图片路径还是备案信息,都能够从后台动态获取并展示,大大提高了模板的复用性和可维护性。

动态内容聚合器:archiveList 标签的深度解析

archiveList 标签是AnqiCMS模板中最为核心且功能强大的内容展示标签。它不仅仅用于获取文章列表,更是一个多功能的“内容聚合器”,能够根据丰富的参数筛选、排序和展示各种模型下的文档(如文章、产品等)。无论是普通的文章列表、相关文档推荐,还是分页内容展示,archiveList 都能游刃有余。

archiveList 标签的基本使用格式是 {% archiveList 变量名称 with 参数="值" %}{% for item in 变量名称 %}...{% endfor %}{% endarchiveList %}。通常我们会将获取到的文档列表赋值给一个变量(例如 archives),然后通过 for 循环遍历这个变量来逐一渲染每篇文档。

该标签支持的参数极其丰富,提供了极高的灵活性:

  • moduleId:指定要获取哪个内容模型下的文档列表,如 moduleId="1" 获取文章模型,moduleId="2" 获取产品模型。
  • categoryId:获取指定分类ID下的文档列表。可传入单个ID,也可传入多个ID用逗号分隔(如 categoryId="1,2,3")。若设置为 0,则不自动读取当前页面分类ID。
  • excludeCategoryId:排除指定分类ID的文档。
  • userId:获取指定用户发布的文档。
  • parentId:获取指定上级文档ID下的子文档(例如,在产品详情页显示相关配件)。
  • flag:根据后台设置的推荐属性(如头条[h]、推荐[c]等)筛选文档。
  • excludeFlag:排除指定推荐属性的文档。
  • showFlag:是否在文档列表中显示文档的Flag属性,默认为 false
  • child:是否包含子分类下的文档,默认为 true。设为 false 则只显示当前分类的文档。
  • order:指定排序规则,如 id desc (最新发布)、views desc (浏览量最多)、sort desc (后台自定义排序)。
  • limit:控制显示数量。可指定一个数字(如 10),或以逗号分隔指定偏移量和数量(如 2,10 表示从第2条开始获取10条)。
  • type:定义列表类型。
    • list:常规列表,按 limit 指定数量显示。
    • page:分页列表,需配合 pagination 标签使用。
    • related:相关文档列表,通常在文档详情页使用,可根据关键词或后台设置的关联推荐。
  • q:搜索关键词,仅在 type="page" 时生效,可用于实现站内搜索。
  • 自定义筛选参数:当后台内容模型定义了可筛选字段后,可以在URL的查询参数中附加这些字段,archiveList 会自动进行筛选。
  • siteId:同 system 标签,用于获取特定站点的文档数据。
  • combineId / combineFromId:用于实现文档组合展示的特殊参数,常用于生成如“从A到B的旅游线路”之类的标题,为内容创作提供了新的可能。

for 循环中,item 变量代表当前遍历到的文档对象,其可用的字段包括:Id (文档ID), Title (文档标题), Link (文档链接), Description (文档描述), Logo (封面首图), Thumb (缩略图), CreatedTime (添加时间,需用 stampToDate 格式化), Views (浏览量) 等,以及内容模型中定义的其他自定义字段。

让我们看几个实际应用场景:

1. 显示最新文章列表 (常规列表类型):

<section class="latest-articles">
    <h2>最新文章</h2>
    <ul>
        {% archiveList articles with moduleId="1" order="id desc" limit="5" %}
            {% for item in articles %}
                <li>
                    <a href="{{ item.Link }}">
                        <img src="{{ item.Thumb }}" alt="{{ item.Title }}" onerror="this.onerror=null;this.src='{% system with name='TemplateUrl' %}/images/default-thumb.jpg';" />
                        <h3>{{ item.Title }}</h3>
                        <p>{{ item.Description|truncatechars:100 }}</p>
                        <span>发布于:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                    </a>
                </li>
            {% empty %}
                <li>暂无最新文章。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>
</section>

这里我们获取文章模型下最新的5篇文章,并展示了它们的缩略图、标题、描述和发布时间。onerror属性是一个小技巧,用于在图片加载失败时显示默认图片。truncatechars:100则用于截断描述,防止过长。

2. 在文章详情页显示相关推荐 (相关文档类型):

<aside class="related-articles">
    <h3>相关推荐</h3>
    <ul>
        {% archiveList relatedDocs with type="related" limit="3" %}
            {% for item in relatedDocs %}
                <li>
                    <a href="{{ item.Link }}">{{ item.Title }}</a>
                </li>
            {% empty %}
                <li>暂无相关推荐。</li>
            {% endfor %}
        {% endarchiveList %}
    </ul>
</aside>

type="related" 会自动根据当前文档的分类、关键词等信息,智能推荐相关文档,极大地增强了用户体验。

3. 显示带分页的文章列表 (分页列表类型):

<section class="blog-list">
    {% archiveList articles with moduleId="1" type="page" limit="10" %}
        {% for item in articles %}
            <article>
                <h2><a href="{{ item.Link }}">{{ item.Title }}</a></h2>
                <p>{{ item.Description }}</p>
                <span>阅读量:{{ item.Views }}</span>
            </article>
        {% empty %}
            <p>没有找到任何文章。</p>
        {% endfor %}

        {# 配合 pagination 标签实现分页 #}
        {% pagination pages with show="5" %}
            <div class="pagination-nav">
                {% if pages.FirstPage %}<a href="{{ pages.FirstPage.Link }}">首页</a>{% endif %}
                {% if pages.PrevPage %}<a href="{{ pages.PrevPage.Link }}">上一页</a>{% endif %}
                {% for pageItem in pages.Pages %}
                    <a href="{{ pageItem.Link }}" class="{% if pageItem.IsCurrent %}active{% endif %}">{{ pageItem.Name }}</a>
                {% endfor %}
                {% if pages.NextPage %}<a href="{{ pages.NextPage.Link }}">下一页</a>{% endif %}
                {% if pages.LastPage %}<a href="{{ pages.LastPage.Link }}">尾页</a>{% endif %}
            </div>
        {% endpagination %}
    {% endarchiveList %}
</section>

在这里,type="page" 告诉AnqiCMS我们需要分页数据,然后 pagination 标签则负责渲染完整的页码导航。这在博客、新闻列表等场景中非常实用。


通过对 systemarchiveList 这两个核心标签的深入理解和灵活运用,我们可以极大地提升AnqiCMS网站的内容展示能力和运营效率。它们是构建动态、丰富且易于维护的AnqiCMS站点的基石。


常见问题解答 (FAQ)

1. 我如何在模板中获取到后台自定义的全局配置信息,例如公司电话或社交媒体链接?

安企CMS的system标签不仅可以获取预设的系统信息,还可以获取您在后台“全局功能设置”或“联系方式设置”中自定义的参数。例如,如果您在后台自定义了一个名为WhatsApp的联系方式字段,在模板中您可以这样获取并显示它: <div>联系WhatsApp:{% contact with name="WhatsApp" %}</div> 同样地,如果您在全局设置中添加了自定义参数,例如helpPageUrl,则可以这样调用: <div>帮助页面:{% system with name="helpPageUrl" %}</div> 这为模板提供了极大的灵活性,可以根据实际运营需求动态扩展显示内容。

2. 当我使用 archiveList 获取文档列表时,如果没有任何内容,我应该如何向用户展示友好提示?

archiveList 标签与 for 循环结合使用时,可以利用 {% empty %} 标签来处理列表为空