You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在特定Subsite中排除Silverstripe Elemental区块或指定允许元素?

Silverstripe Elemental 按Subsite控制区块权限

完全可以针对特定Subsite排除Elemental区块,也能按Subsite单独指定允许使用的区块,支持通过配置文件、自定义函数/扩展来实现,具体方法如下:

一、通过配置文件实现

Silverstripe的配置系统支持按Subsite上下文覆盖配置,你可以针对不同Subsite设置允许的区块列表:

  1. 先在全局config.yml定义基础允许的区块:
Page:
  extensions:
    - DNADesign\Elemental\Extensions\ElementalPageExtension
DNADesign\Elemental\Models\ElementArea:
  allowed_elements:
    - DNADesign\Elemental\Models\ElementContent
    - DNADesign\Elemental\Models\ElementImage
  1. 为特定Subsite单独配置(比如Subsite ID为2的站点,只允许文本区块):
---
Name: subsite2-elemental-config
After: elemental/*
Only:
  subsites:
    - 2
---
DNADesign\Elemental\Models\ElementArea:
  allowed_elements:
    - DNADesign\Elemental\Models\ElementContent

如果需要排除特定区块,可使用disallowed_elements配置(需Elemental版本支持):

---
Name: subsite3-elemental-config
After: elemental/*
Only:
  subsites:
    - 3
---
DNADesign\Elemental\Models\ElementArea:
  disallowed_elements:
    - DNADesign\Elemental\Models\ElementImage

二、通过自定义扩展/函数实现

如果需要更灵活的动态逻辑(比如根据Subsite属性判断),可以写一个DataExtension扩展ElementArea:

  1. 创建扩展文件app/src/Extensions/SubsiteElementalControlExtension.php:
<?php

namespace App\Extensions;

use DNADesign\Elemental\Models\ElementArea;
use SilverStripe\Core\Extension;
use SilverStripe\Subsites\Model\Subsite;

class SubsiteElementalControlExtension extends Extension
{
    public function updateAllowedElements(&$allowed)
    {
        $currentSubsite = Subsite::currentSubsite();
        if (!$currentSubsite) {
            return;
        }

        // 根据Subsite ID或属性动态过滤
        switch ($currentSubsite->ID) {
            case 4:
                $allowed = [
                    DNADesign\Elemental\Models\ElementContent::class,
                    DNADesign\Elemental\Models\ElementVideo::class,
                ];
                break;
            case 5:
                // 移除地图区块
                $mapKey = array_search(DNADesign\Elemental\Models\ElementMap::class, $allowed);
                if ($mapKey !== false) {
                    unset($allowed[$mapKey]);
                }
                break;
        }
    }
}
  1. 在config.yml注册扩展:
DNADesign\Elemental\Models\ElementArea:
  extensions:
    - App\Extensions\SubsiteElementalControlExtension

三、注意事项

  • 确保Subsites模块与Elemental模块版本兼容,旧版本可能不支持Only: subsites配置语法,需升级到较新版本。
  • 若使用自定义Page类型,可直接在对应Page类型的配置中按Subsite覆盖allowed_elements,逻辑与上述一致。

内容的提问来源于stack exchange,提问作者galilee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 07:45:34