如何在 AnQiCMS 模板中列出所有或指定类型的单页面?

在AnQiCMS中管理和展示单页面是网站运营的常见需求,尤其对于“关于我们”、“联系方式”、“服务条款”这类静态内容。作为一名经验丰富的AnQiCMS运营人员,我深知高效利用模板标签,能够极大地提升内容发布的灵活性和网站的维护效率。本文将详细阐述如何在AnQiCMS模板中列出所有或指定类型的单页面。

理解AnQiCMS中的单页面机制

在AnQiCMS中,单页面(Single Page)是独立于文章、产品等内容模型的一种特殊页面类型。它们通常用于展示相对固定、不涉及分类或列表聚合的内容。AnQiCMS提供了专门的后台“页面管理”功能(位于“页面资源”下)来创建和编辑这些单页面。在模板层面,AnQiCMS为单页面的调用提供了直观且强大的标签。

列出所有单页面

要获取并展示网站中所有已创建的单页面,我们需要使用AnQiCMS内置的pageList标签。这个标签会返回一个包含所有单页面数据的数组对象,我们可以通过循环遍历这个数组来逐一显示每个单页面的信息。

通常,pageList标签的使用方式如下,其中pages是我们为获取到的单页面列表定义的变量名:

{% pageList pages %}
    {% for item in pages %}
    <li>
        <a href="{{item.Link}}">{{item.Title}}</a>
        <p>{{item.Description}}</p>
    </li>
    {% endfor %}
{% endpageList %}

在上述代码中,item是每次循环中代表一个单页面的变量。我们可以通过访问item的属性来获取单页面的详细信息,例如:

  • item.Id:单页面的唯一ID。
  • item.Title:单页面的标题。
  • item.Link:单页面的访问链接。
  • item.Description:单页面的简介。
  • item.Content:单页面的完整内容。
  • item.Logo:单页面的大图(如果设置)。
  • item.Thumb:单页面的缩略图(如果设置)。

这个方法非常适合在网站底部导航、侧边栏或者某个聚合页面中统一展示所有单页面链接的场景。

列出指定类型的单页面

在某些情况下,我们可能需要更精确地控制要显示的单页面,例如只显示“关于我们”页面,或者排除某个特定页面。AnQiCMS通过结合pageDetail标签和for循环中的条件判断,为我们提供了这种灵活性。

1. 获取指定ID或URL别名的单页面详情

如果我们明确知道某个单页面的ID或URL别名(token),可以直接使用pageDetail标签来获取它的详细信息。这在需要将特定单页面内容嵌入到其他页面时非常有用。

例如,获取ID为1的单页面标题:

<div>关于我们页面标题:{% pageDetail with name="Title" id="1" %}</div>

或者通过URL别名about-us获取其内容:

{% pageDetail aboutPage with name="Content" token="about-us" %}
<div>关于我们页面内容:{{aboutPage|safe}}</div>

这种方式直接且高效,适用于内容固定且唯一的单页面调用。

2. 在所有单页面列表中排除或选择特定页面

当我们使用pageList获取所有单页面后,可以在for循环中加入if条件判断,根据单页面的IdTitleLink等属性来筛选出我们想要的页面,或者排除不想要的页面。

例如,要列出所有单页面,但排除ID为1的“关于我们”页面:

<ul>
{% pageList pages %}
    {% for item in pages %}
        {% if item.Id != 1 %} {# 排除ID为1的页面 #}
        <li>
            <a href="{{ item.Link }}">{{item.Title}}</a>
            <p>{{item.Description}}</p>
        </li>
        {% endif %}
    {% endfor %}
{% endpageList %}
</ul>

又如,我们只想显示标题中包含“服务”二字的单页面:

<ul>
{% pageList pages %}
    {% for item in pages %}
        {% if item.Title contains "服务" %} {# 假设存在“contains”过滤器或使用其他逻辑 #}
        <li>
            <a href="{{ item.Link }}">{{item.Title}}</a>
            <p>{{item.Description}}</p>
        </li>
        {% endif %}
    {% endfor %}
{% endpageList %}
</ul>

需要注意的是,item.Title contains "服务"这类高级字符串匹配可能需要结合AnQiCMS模板引擎提供的过滤器(如filter__name:param)或Go语言的strings.Contains函数(如果模板引擎支持)。在AnQiCMS的Django模板语法中,通常会使用if语句结合变量的直接比较,或者借助预处理的数据。如果仅仅是简单的ID或别名匹配,上述item.Id != 1的方式是完全可行的。

3. 利用自定义URL别名和自定义模板

AnQiCMS允许为单页面设置“自定义URL”和“单页面模板”。这意味着我们可以通过后台配置,赋予单页面一个具有业务含义的URL别名(例如about-us对应“关于我们”页面),并在模板中通过这个别名进行调用。更进一步,如果某些单页面需要完全独特的布局,可以为它们指定专属的模板文件(例如page/about.html),这样在访问这些页面时,系统会自动加载对应的自定义模板。这种方式虽然不直接用于列表筛选,但提供了对特定单页面显示的高度定制能力。

模板文件组织与渲染

根据AnQiCMS的模板约定,单页面详情页的默认模板是page/detail.html。如果为某个单页面指定了自定义模板,例如命名为page/about.html,那么访问该单页面时就会渲染about.html。理解这些规则有助于我们更有效地组织模板文件,并精确地在不同的页面中调用和展示单页面内容。

AnQiCMS的单页面管理机制灵活且强大,无论是统一列出所有单页面,还是精确调用或筛选特定页面,都可以通过组合使用pageListpageDetail标签,以及适当的模板逻辑判断来实现。这使得网站运营人员能够轻松应对各种内容展示需求,确保网站内容的高质量呈现。


常见问题解答 (FAQ)

1. 为什么我使用pageList标签没有显示任何单页面内容?

如果pageList标签没有显示任何内容,请首先检查AnQiCMS后台的“页面管理”中是否已经创建了单页面。确保这些页面处于“已发布”状态,而不是草稿或回收站中。其次,检查你的模板文件路径是否正确,以及标签的语法是否完全符合AnQiCMS的Django模板引擎规范。

2. 如何在单页面列表中的每个项目旁边显示缩略图?

pageList循环中,每个item变量都包含Thumb字段,用于存储单页面的缩略图地址。你可以在<li>标签内部添加一个<img>标签,并将src属性设置为{{item.Thumb}}来显示缩略图。在添加之前,最好使用if item.Thumb进行判断,以避免在没有缩略图时出现破图。

3. 我想让某些单页面不被搜索引擎抓取,应该怎么做?

对于不希望被搜索引擎抓取的单页面,你可以在AnQiCMS后台编辑该单页面时,寻找SEO相关的设置项,通常会有“nofollow”或“noindex”的选项。如果直接在模板中调用,并且该页面不生成独立的URL(例如仅仅是内容嵌入),则可以考虑在<a>标签中添加rel="nofollow"属性,或者在页面head部分添加<meta name="robots" content="noindex, nofollow">标签,这通常通过自定义模板或使用tdk标签的SEO字段来实现。AnQiCMS的tag-tdk.md文档提到了TDK设置,包括CanonicalUrl,间接也支持SEO控制,你也可以在后台为特定页面设置SEO标题、关键词和描述,并利用这些字段来生成meta标签。