在使用AnQiCMS进行网站内容管理时,我们经常需要根据特定的内容组织方式来展示信息。其中,如何灵活地调用并展示某个指定分类下的子分类列表,或者该分类所关联的文章列表,是许多用户会遇到的场景。AnQiCMS强大的模板引擎和丰富的标签功能,让实现这些需求变得直观且高效。
AnQiCMS采用了类似Django模板引擎的语法,这意味着您可以通过简洁的标签来获取和渲染数据,而无需深入复杂的编程代码。这使得内容运营人员即使不具备深厚的开发背景,也能轻松驾驭网站内容的展示逻辑。
灵活调用并显示指定分类下的子分类列表
在构建网站导航、侧边栏或者某个专题页面的内容索引时,我们常常需要列出某个主分类下的所有子分类。AnQiCMS提供了categoryList标签,能够帮助我们轻松实现这一目标。
要调用指定分类下的子分类列表,最关键的参数是moduleId和parentId。moduleId用于指定您要获取的是哪种内容模型(例如文章模型、产品模型等)的分类,通常文章模型对应的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.Link和category.Title会分别输出子分类的链接和名称。category.HasChildren则是一个布尔值,可以用来判断当前分类是否还有更深层次的子分类,以便于在前端进行不同的展示处理。
调取并展示指定分类下的关联文章列表
除了展示子分类,我们更常做的是展示某个分类下的文章内容。AnQiCMS的archiveList标签是处理这类需求的利器。它不仅能获取文章列表,还能进行多种筛选和排序。
要显示指定分类下的文章,同样需要明确moduleId和categoryId。categoryId设置为您想要展示文章的那个分类的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