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

Silverstripe多子站下LinkField页面下拉如何按子站筛选?

Silverstripe LinkField 按子站筛选页面的解决思路
  • 利用树形菜单的过滤回调限定站点
    在LinkField配置中,通过setTreeConfig传入过滤逻辑,基于当前子站ID筛选页面:

    $linkField = LinkField::create('BannerLink', 'Banner Link')
        ->setTreeConfig([
            'filter' => function ($tree) {
                $currentSite = Site::current_site();
                return $tree->filter('SiteID', $currentSite->ID);
            }
        ]);
    

    该方法直接给树形组件添加站点ID过滤规则,只展示当前子站下的页面。

  • 指定子站根节点缩小树形范围
    如果过滤回调不生效,可直接将树形菜单的根节点设为当前子站的首页,避免加载其他站点页面:

    $currentSite = Site::current_site();
    $linkField = LinkField::create('BannerLink', 'Banner Link')
        ->setConfig('tree_base_id', $currentSite->Root()->ID);
    

    这种方式从子站根页面开始渲染树形结构,天然屏蔽其他站点内容。

  • 全局扩展实现批量过滤
    若所有LinkField都需要站点过滤,可通过扩展类全局配置:

    1. 创建扩展类:
    class SiteFilteredLinkFieldExtension extends Extension
    {
        public function updateTreeConfig(&$config)
        {
            $currentSite = Site::current_site();
            if ($currentSite) {
                $config['filter'] = function ($tree) use ($currentSite) {
                    return $tree->filter('SiteID', $currentSite->ID);
                };
            }
        }
    }
    
    1. 在config.yml注册扩展:
    SilverStripe\Forms\LinkField:
      extensions:
        - SiteFilteredLinkFieldExtension
    
  • 排查管理员权限影响
    超级管理员默认会看到所有站点页面,即使配置了过滤。这种情况需强制保留过滤逻辑,不受用户权限影响,确保后台展示的页面严格归属当前子站。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:02:35