AnQiCMS如何调用并显示指定分类下的子分类列表或其关联文章列表?

在使用AnQiCMS进行网站内容管理时,我们经常需要根据特定的内容组织方式来展示信息。其中,如何灵活地调用并展示某个指定分类下的子分类列表,或者该分类所关联的文章列表,是许多用户会遇到的场景。AnQiCMS强大的模板引擎和丰富的标签功能,让实现这些需求变得直观且高效。

AnQiCMS采用了类似Django模板引擎的语法,这意味着您可以通过简洁的标签来获取和渲染数据,而无需深入复杂的编程代码。这使得内容运营人员即使不具备深厚的开发背景,也能轻松驾驭网站内容的展示逻辑。

灵活调用并显示指定分类下的子分类列表

在构建网站导航、侧边栏或者某个专题页面的内容索引时,我们常常需要列出某个主分类下的所有子分类。AnQiCMS提供了categoryList标签,能够帮助我们轻松实现这一目标。

要调用指定分类下的子分类列表,最关键的参数是moduleIdparentIdmoduleId用于指定您要获取的是哪种内容模型(例如文章模型、产品模型等)的分类,通常文章模型对应的ID是1,产品模型可能是2,具体可以在后台内容模型管理中查看。parentId则是指定您想要获取哪个分类的子分类。如果parentId设置为0,则会获取所有顶级分类。如果您想获取某个特定分类(比如ID为X的分类)下的子分类,只需将parentId设置为X即可。

下面是一个展示如何调用文章模型下某个特定分类(例如,我们假设分类ID为10)的子分类列表的示例:

{% categoryList subCategories with moduleId="1" parentId="10" %}
    <ul class="sub-category-list">
        {% for category in subCategories %}
            <li>
                <a href="{{ category.Link }}" title="{{ category.Title }}">{{ category.Title }}</a>
                {% if category.HasChildren %}
                    {# 如果子分类还有下级,可以继续嵌套调用,或者仅显示一层 #}
                    <span class="has-children-indicator">»</span>
                {% endif %}
            </li>
        {% empty %}
            <p>该分类下暂无子分类。</p>
        {% endfor %}
    </ul>
{% endcategoryList %}

在这段代码中,subCategories是我们为获取到的子分类列表定义的变量名。category.Linkcategory.Title会分别输出子分类的链接和名称。category.HasChildren则是一个布尔值,可以用来判断当前分类是否还有更深层次的子分类,以便于在前端进行不同的展示处理。

调取并展示指定分类下的关联文章列表

除了展示子分类,我们更常做的是展示某个分类下的文章内容。AnQiCMS的archiveList标签是处理这类需求的利器。它不仅能获取文章列表,还能进行多种筛选和排序。

要显示指定分类下的文章,同样需要明确moduleIdcategoryIdcategoryId设置为您想要展示文章的那个分类的ID。此外,limit参数可以控制显示的文章数量,order参数可以定义排序规则(比如按发布时间倒序id desc,或按浏览量倒序views desc)。type参数则决定了列表的类型,list表示获取固定数量的列表,而page则意味着您希望进行分页显示。

以下是一个展示分类ID为15的文章模型下文章列表的例子,并包含简单的分页功能:

<div class="category-articles">
    {# 调用分类ID为15的文章列表,每页显示10篇文章,并启用分页 #}
    {% archiveList articles with categoryId="15" moduleId="1" limit="10" order="id desc" type="page" %}
        {% for article in articles %}
            <div class="article-item">
                <a href="{{ article.Link }}" title="{{ article.Title }}">
                    <h3>{{ article.Title }}</h3>
                    {% if article.Thumb %}
                        <img src="{{ article.Thumb }}" alt="{{ article.Title }}" class="article-thumb">
                    {% endif %}
                    <p>{{ article.Description|truncatechars:100 }}</p> {# 截取前100个字符作为简介 #}
                    <span class="publish-date">发布于:{{ stampToDate(article.CreatedTime, "2006-01-02") }}</span>
                    <span class="views">阅读量:{{ article.Views }}</span>
                </a>
            </div>
        {% empty %}
            <p>该分类下暂无文章。</p>
        {% endfor %}

        {# 结合分页标签,生成分页链接 #}
        {% pagination pages with show="5" %}
            <div class="pagination-controls">
                {% 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 %}
</div>

在这个例子中,articles是我们定义的文章列表变量。我们展示了文章标题、缩略图、简介、发布日期和阅读量。truncatechars:100是一个过滤器,用于将简介内容截断到指定长度并添加省略号,这在列表页展示时非常实用。stampToDate是一个格式化时间戳的标签,可以将CreatedTime这个时间戳转换为易读的日期格式。当type="page"时,pagination标签会根据当前列表的上下文自动生成分页链接。

结合使用:构建更动态的展示

AnQiCMS的模板标签还可以灵活地组合使用,构建出更具动态性的页面内容。例如,您可能希望在一个页面上首先列出多个顶级分类,然后在每个分类下再显示其最新的几篇文章。

”`twig

{% categoryList mainCategories with moduleId="1" parentId="0" %} {# 获取文章模型下的所有顶级分类 #}
    {% for mainCategory in mainCategories %}
        <div class="main-category-block">
            <h2><a href="{{ mainCategory.Link }}">{{ mainCategory.Title }}</a></h2>
            <ul class="articles-in-category">
                {# 在每个顶级分类下,调用其最新的5篇文章 #}
                {% archiveList articlesInCategory with type="list" categoryId=mainCategory.Id limit="5" order="id desc" %}
                    {% for article in articlesInCategory