在多站点管理模式下,如何从其他站点调用并显示指定的内容或系统配置信息?

AnQiCMS 强大的多站点管理功能,为拥有多个品牌或子站点的用户带来了极大的便利。它不仅能让您统一管理不同的内容站点,更支持跨站点的数据共享与资源整合。当您希望在一个站点上展示来自其他站点的内容,或是调用其他站点的系统配置信息时,AnQiCMS 提供了一套简洁而高效的机制来实现这一目标。

在 AnQiCMS 中,实现跨站点内容或配置信息的调用,其核心在于灵活运用模板标签的 siteId 参数。这个参数如同一个站点识别码,明确告诉系统您希望从哪个特定的站点获取数据。通过为各种内容和配置相关的模板标签指定这个 siteId,您便能轻松地在您的主站上展示子站的最新文章,或者在产品站上调用企业官网的联系方式等。

调用其他站点的内容信息

想象一下,您有一个企业官网和一个专门发布行业新闻的子站。如果您想在企业官网的首页显示子站的最新五篇新闻,您无需手动复制粘贴,也无需复杂的二次开发。利用 archiveList 标签,并指定子站的 siteId 即可:

{% archiveList latestNews with type="list" limit="5" siteId="您子站的ID" %}
    {% for item in latestNews %}
        <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
    {% endfor %}
{% endarchiveList %}

这里,siteId="您子站的ID" 就是关键所在。它指示系统从您指定 ID 的子站获取文章列表。

同样,如果您需要显示某个特定文章的详细信息,例如一个产品介绍页面,您可以使用 archiveDetail 标签:

{% archiveDetail productDetail with name="Content" id="指定文章ID" siteId="您产品站的ID" %}
    <div class="product-description">{{ productDetail|safe }}</div>
{% endarchiveDetail %}

通过指定 idsiteId,您就能精准地获取到特定站点的特定内容字段。

这种机制同样适用于其他类型的内容标签。例如,如果您想列出某个子站的分类列表,可以使用 categoryList

{% categoryList subSiteCategories with moduleId="1" parentId="0" siteId="您子站的ID" %}
    {% for category in subSiteCategories %}
        <a href="{{ category.Link }}">{{ category.Title }}</a>
    {% endfor %}
{% endcategoryList %}

或者调用特定单页面的详情:

{% pageDetail aboutPage with name="Content" token="about-us" siteId="您子站的ID" %}
    <div>{{ aboutPage|safe }}</div>
{% endpageDetail %}

甚至可以获取其他站点的标签云或与某个标签相关的文档列表,只需在 tagListtagDataList 中加入 siteId 参数即可。

调用其他站点的系统配置信息

除了内容,您可能还会遇到需要调用其他站点的系统配置信息的情况,比如联系方式、网站 Logo、备案号等。AnQiCMS 同样为此提供了便利。

system 标签允许您获取各种全局系统配置:

<img src="{% system with name="SiteLogo" siteId="您官网的ID" %}" alt="Logo">
<p>{% system with name="SiteCopyright" siteId="您官网的ID" %}</p>

在这里,siteId="您官网的ID" 让您能够轻而易举地获取到官网设定的 Logo 地址和版权信息,而无需在每个子站中重复配置。

如果您需要展示另一个站点的联系方式,contact 标签同样支持 siteId 参数:

<p>联系电话:{% contact with name="Cellphone" siteId="您其他站点的ID" %}</p>
<p>联系邮箱:{% contact with name="Email" siteId="您其他站点的ID" %}</p>

这在搭建统一客服或信息展示页面时尤其有用。

即使是页面的 TDK(Title, Keywords, Description)信息,也能通过 tdk 标签指定 siteId 来调用:

<title>{% tdk with name="Title" siteId="您其他站点的ID" %}</title>

此外,navList 标签也支持 siteId,这意味着您甚至可以在一个站点上展示来自另一个站点的导航菜单,实现更高度的统一和复用。

如何获取 siteId

那么,如何知道不同站点的 siteId 呢?在 AnQiCMS 的后台管理界面,您可以通过“多站点管理”功能查看到所有已创建站点的详细信息,其中通常会包含每个站点的唯一标识符,即 siteId。这个 ID 通常是一个数字,您只需将其替换到模板标签中的 siteId 参数即可。

AnQiCMS 提供的这种跨站点调用能力,极大地提升了多站点运营的效率和灵活性。无论是内容聚合、统一品牌形象,还是集中管理核心信息,siteId 参数都扮演着不可或缺的角色,让您的多站点生态系统更加紧密和高效。


常见问题 (FAQ)

  1. 我可以在哪些类型的模板标签中使用 siteId 参数? siteId 参数几乎支持所有与内容和系统配置相关的 AnQiCMS 模板标签,包括 archiveList (文档列表), archiveDetail (文档详情), categoryList (分类列表), pageDetail (单页详情), tagList (标签列表), system (系统配置), contact (联系方式), tdk (页面TDK), navList (导航列表) 等。只要您需要从非当前站点获取数据,通常都可以尝试使用 siteId 参数来指定来源。

  2. 调用其他站点的数据会影响当前站点的加载速度吗? 由于 AnQiCMS 是一个基于 Go 语言开发的高性能内容管理系统,并且通常多站点部署在同一台服务器上,因此通过 siteId 进行的内部数据调用通常效率很高,对当前站点的加载速度影响很小。但如果调用了大量来自其他站点的数据,或者目标站点本身数据量庞大、查询复杂,仍然建议您进行性能测试,并考虑对数据进行缓存以优化用户体验。

  3. 如果我指定的 siteId 不存在,或者该站点上没有我请求的内容,系统会如何处理? 如果 siteId 不存在或者目标站点上没有找到请求的特定内容(例如,请求的文章 ID 在目标站点上不存在),AnQiCMS 的模板标签通常会返回空值或一个空集合。这意味着您的页面不会因为数据缺失而报错,而是会显示空白或者您在模板中为“无内容”情况设置的备用信息。为了更好的用户体验,建议在模板中为可能返回空值的标签添加判断(例如 {% if item %}{% empty %})来处理这种情况。