是否可以在 silverstripe 子站点模块中显示所有子站点的特定页面?
Is it possible to show a specific page on all subsites within the silverstripe subsite module?
我正忙着在类别页面下附加数据对象,其中一些在不同的子站点下。但是我在我的数据对象上看不到其他子站点的这些页面,这是有道理的。
起初我尝试制作一个自定义数组,其中包含来自数据库的类别数据。但这返回了一个错误,因为数据是由 GridField 读出的,而我的数组不是 SS_LIST。
我想做的是允许这些特定页面通过复选框等简单的方式显示在所有子站点上。有办法实现吗?
对于一个特定的页面,您可以 link 使用 SubsitesVirtualPage
手动将其添加到每个子站点。
Subsites 利用 AugmentDatabase
神奇地过滤当前的 SubsiteID。如果你想在全球范围内添加这些页面,那就很棘手了。
如果只是一些列表,例如在页脚中,您可以执行以下操作:
$list = Page::get()->filter(...);
$list->alterDataQuery(
function ($query, $list) {
$query->setQueryParam('Subsite.filter', false);
}
);
所以这个特定的列表不会过滤当前的子网站。您可以传递 DataList 并在以后对其进行优化(例如添加额外的过滤器、限制、排序等)
一个全局解决方案是调整 Subsite 的扩展以根据您的需要进行过滤。
我正忙着在类别页面下附加数据对象,其中一些在不同的子站点下。但是我在我的数据对象上看不到其他子站点的这些页面,这是有道理的。
起初我尝试制作一个自定义数组,其中包含来自数据库的类别数据。但这返回了一个错误,因为数据是由 GridField 读出的,而我的数组不是 SS_LIST。
我想做的是允许这些特定页面通过复选框等简单的方式显示在所有子站点上。有办法实现吗?
对于一个特定的页面,您可以 link 使用 SubsitesVirtualPage
手动将其添加到每个子站点。
Subsites 利用 AugmentDatabase
神奇地过滤当前的 SubsiteID。如果你想在全球范围内添加这些页面,那就很棘手了。
如果只是一些列表,例如在页脚中,您可以执行以下操作:
$list = Page::get()->filter(...);
$list->alterDataQuery(
function ($query, $list) {
$query->setQueryParam('Subsite.filter', false);
}
);
所以这个特定的列表不会过滤当前的子网站。您可以传递 DataList 并在以后对其进行优化(例如添加额外的过滤器、限制、排序等)
一个全局解决方案是调整 Subsite 的扩展以根据您的需要进行过滤。