首页 > 解决方案 > 是否可以在 silverstripe 子站点模块中的所有子站点上显示特定页面?

问题描述

我正忙于在类别页面下附加数据对象,其中一些位于不同的子站点下。但是我在我的数据对象上看不到其他子站点的这些页面,这是有道理的。

起初,我尝试制作一个自定义数组,其中包含数据库中的类别数据。但这返回了一个错误,因为数据是由 GridField 读出的,而我的数组不是 SS_LIST。

我想要做的是允许这些特定页面通过简单的复选框显示在所有子站点上。有没有办法做到这一点?

标签: phpmodulesilverstripesilverstripe-4

解决方案


对于一个特定页面,您可以使用手动将其链接到每个子站点SubsitesVirtualPage

Subsites 利用AugmentDatabase神奇的过滤器过滤当前的 SubsiteID。如果您想在全局范围内添加这些页面,它会变得很棘手。

如果只是一些列表,例如在页脚中,您可以执行以下操作:

$list = Page::get()->filter(...);
$list->alterDataQuery(
    function ($query, $list) {
        $query->setQueryParam('Subsite.filter', false);
    }
);

因此,此特定列表不会过滤当前子站点。您可以传递 DataList 并稍后对其进行细化(例如添加其他过滤器、限制、排序等)

一个全球性的解决方案是调整子站点的扩展来满足您的需求。


推荐阅读