驾驭多站点导航: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,就可以轻松地拉取并展示其导航菜单。这对于构建统一的品牌门户、共享全局底部导航或在关联站点之间创建便捷的跳转链接等场景,都显得尤为实用。

举个例子,假设您的主站(siteId1)需要在一个角落显示您的子品牌站点B(siteId2)的特定导航菜单(假设其导航类别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,去 siteId2 的那个站点查找导航数据。而 typeId="3" 则进一步筛选出该站点下特定ID为3的导航类别。这样一来,即使访问者正在浏览主站,也能一目了然地看到子品牌站点的产品导航,并点击跳转,极大地提升了用户体验和站点间的联动性。

实际应用场景与操作要点

  1. 获取 siteId 要使用 siteId 参数,首先需要知道目标站点的 siteId。这个信息可以在 AnQiCMS 后台的“多站点管理”模块中找到。每个站点的列表项都会清晰地显示其唯一的数字 ID,这就是我们在模板中需要使用的 siteId

  2. 构建统一的全局页脚/页头: 许多企业希望所有子站点都拥有一个统一的页脚,其中包含公司信息、隐私政策和主要产品线的链接。通过在公共模板(如 base.html)中结合 navListsiteId,您可以从一个中央管理站点调用这些全局导航,确保所有子站点内容的同步和一致性。

    {% 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>&copy; {% now "2006" %} {{ system.SiteName }} All Rights Reserved.</p>
    </footer>
    
  3. 嵌套多站点导航: 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 参数的