驾驭多站点导航:AnQiCMS navList 标签与 siteId 参数的深度解析
在当今复杂多变的网络环境中,许多企业和内容运营者不再满足于单一站点的运营模式。品牌延伸、地域分站、产品线独立展示,都催生了多站点管理的需求。安企CMS(AnQiCMS)作为一个专为企业级内容管理打造的系统,深谙此道,其强大的多站点管理功能正是为了解决这一痛点而生。今天,我们将聚焦于AnQiCMS模板开发中的一个关键特性:如何巧妙运用 navList 标签与 siteId 参数,实现跨站点导航的灵活调用。
AnQiCMS 的核心优势之一便是其强大的多站点管理能力。它允许用户在同一套系统架构下创建并独立管理多个网站,每个站点可以拥有自己的内容、模板、设置乃至语言包。这极大地简化了多品牌或多区域运营的复杂性,减少了重复性工作,并促进了跨站点的数据共享与资源整合。
认识 navList 标签:站点导航的基石
在 AnQiCMS 的模板体系中,navList 标签是构建导航菜单的核心工具。它负责从后台提取预设的导航数据,并以可迭代的列表形式提供给前端模板进行渲染。无论是顶部的全局导航,侧边栏的分类导航,还是底部的友情链接,navList 都能胜任。
通常情况下,我们会在当前站点的模板中直接使用 navList 标签来显示该站点的导航,例如:
{% navList navs %}
<ul class="main-navigation">
{% for item in navs %}
<li class="{% if item.IsCurrent %}active{% endif %}">
<a href="{{ item.Link }}">{{ item.Title }}</a>
{% if item.NavList %}
<dl class="sub-navigation">
{% for sub_item in item.NavList %}
<dd><a href="{{ sub_item.Link }}">{{ sub_item.Title }}</a></dd>
{% endfor %}
</dl>
{% endif %}
</li>
{% endfor %}
</ul>
{% endnavList %}
这段代码会根据当前站点后台“网站导航设置”中配置的导航类别(默认为ID为1的“默认导航”)来动态生成菜单。但如果我们的目标是调用另一个站点的导航呢?这时,siteId 参数就派上用场了。
siteId 参数:解锁跨站点导航调用的魔法钥匙
现在,让我们深入探讨 siteId 参数,它正是实现跨站点导航调用的魔法钥匙。在 AnQiCMS 中,每一个通过“多站点管理”功能创建的独立站点都会被分配一个唯一的 siteId。这个 siteId 是站点的数字标识符,就像每个网站的身份证号码一样。
navList 标签提供了一个 siteId 参数,允许您明确指定要从哪个站点获取导航数据。这意味着,无论您当前身处哪个站点,只要知道目标站点的 siteId,就可以轻松地拉取并展示其导航菜单。这对于构建统一的品牌门户、共享全局底部导航或在关联站点之间创建便捷的跳转链接等场景,都显得尤为实用。
举个例子,假设您的主站(siteId 为 1)需要在一个角落显示您的子品牌站点B(siteId 为 2)的特定导航菜单(假设其导航类别ID为 3,名为“产品中心”)。您可以在主站的模板中这样编写代码:
{% comment %} 假设当前站点是站点A(siteId为1),我们想调用站点B(siteId为2)的“产品中心”导航 {% endcomment %}
<div class="site-b-product-nav">
<h3>探索我们的产品</h3>
{% navList siteB_products with typeId="3" siteId="2" %}
<ul>
{% for item in siteB_products %}
<li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
{% endfor %}
</ul>
{% endnavList %}
</div>
在这段代码中,siteId="2" 精准地告诉 AnQiCMS,去 siteId 为 2 的那个站点查找导航数据。而 typeId="3" 则进一步筛选出该站点下特定ID为3的导航类别。这样一来,即使访问者正在浏览主站,也能一目了然地看到子品牌站点的产品导航,并点击跳转,极大地提升了用户体验和站点间的联动性。
实际应用场景与操作要点
获取
siteId: 要使用siteId参数,首先需要知道目标站点的siteId。这个信息可以在 AnQiCMS 后台的“多站点管理”模块中找到。每个站点的列表项都会清晰地显示其唯一的数字ID,这就是我们在模板中需要使用的siteId。构建统一的全局页脚/页头: 许多企业希望所有子站点都拥有一个统一的页脚,其中包含公司信息、隐私政策和主要产品线的链接。通过在公共模板(如
base.html)中结合navList和siteId,您可以从一个中央管理站点调用这些全局导航,确保所有子站点内容的同步和一致性。{% comment %} 从主站点(siteId为1)获取全局底部导航(typeId为2) {% endcomment %} <footer class="global-footer"> {% navList global_footer_nav with typeId="2" siteId="1" %} <ul class="footer-links"> {% for item in global_footer_nav %} <li><a href="{{ item.Link }}">{{ item.Title }}</a></li> {% endfor %} </ul> {% endnavList %} <p>© {% now "2006" %} {{ system.SiteName }} All Rights Reserved.</p> </footer>嵌套多站点导航:
navList标签返回的item对象中包含了NavList属性,可以用于处理二级甚至多级导航。当结合siteId使用时,您可以构建复杂的跨站点导航结构,例如在一个站点的下拉菜单中显示另一个站点的分类列表,甚至是其热门文章。{% comment %} 在当前站点的导航中,嵌套显示另一个站点(siteId为3)的某个分类下的产品列表 {% endcomment %} {% navList current_site_nav with typeId="1" %} <ul> {% for item in current_site_nav %} <li> <a href="{{ item.Link }}">{{ item.Title }}</a> {% if item.Title == "我们的合作伙伴" %} {% comment %} 假设通过标题匹配一个特定菜单项 {% endcomment %} <ul class="partner-products"> {% archiveList partner_products with type="list" siteId="3" categoryId="10" limit="5" %} {% comment %} 调用siteId为3的站点的分类ID为10的产品 {% endcomment %} {% for product in partner_products %} <li><a href="{{ product.Link }}">{{ product.Title }}</a></li> {% endfor %} {% endarchiveList %} </ul> {% endif %} </li> {% endfor %} </ul> {% endnavList %}上述例子虽然结合了
archiveList,但其思想是相通的,都是通过siteId来实现跨站点的数据调用。
总结与展望
通过 navList 标签与 siteId 参数的