是否可以在silverstripe子网站模块内的所有子网站上显示特定页面?

时间:2019-01-09 13:05:03

标签: php module silverstripe silverstripe-4

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

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

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

1 个答案:

答案 0 :(得分:2)

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

子站点利用AugmentDatabase神奇地过滤了当前的SubsiteID。如果要全局添加这些页面,将变得很棘手。

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

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

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

全球解决方案是调整Subsite的扩展名,以根据您的需求进行过滤。