Silverstripe 3.6添加带文本字段的CMS菜单项方法咨询
创建无Data Object的Silverstripe CMS自定义菜单项
嘿,很高兴看到你在摸索Silverstripe CMS!要打造一个像Settings菜单那样、无需单独Data Object的自定义CMS菜单项,咱们可以利用Silverstripe自带的全局配置工具SiteConfig,再配合后台扩展来实现,步骤如下:
1. 扩展SiteConfig添加自定义字段
因为你要的是全局可配置的文本字段,直接给SiteConfig(Silverstripe原生的全局配置存储对象)扩展字段是最省事的,不用额外新建Data Object。
在你的项目app/src/Extension目录下创建SiteConfigExtension.php文件,内容如下:
<?php namespace App\Extension; use SilverStripe\Core\Extension; use SilverStripe\Forms\TextField; class SiteConfigExtension extends Extension { // 定义要添加的数据库字段 private static $db = [ 'CustomTextField' => 'Varchar(255)' // 可根据需求调整字段类型,比如用Text类型对应TextareaField ]; // 更新SiteConfig的CMS编辑字段 public function updateCMSFields($fields) { // 给SiteConfig添加一个新的标签页,把你的文本字段放进去 $fields->addFieldToTab( 'Root.CustomSettings', TextField::create('CustomTextField', '我的自定义文本') ); } }
2. 注册SiteConfig扩展
在app/_config/app.yml里注册刚才写的扩展,让Silverstripe识别它:
SilverStripe\SiteConfig\SiteConfig: extensions: - App\Extension\SiteConfigExtension
3. 添加自定义CMS菜单项
如果不想用默认的Settings菜单,想单独加一个新的菜单项指向你的配置页面,咱们用LeftAndMainExtension来扩展后台菜单。
在app/src/Extension目录下创建CMSMainExtension.php:
<?php namespace App\Extension; use SilverStripe\Admin\LeftAndMainExtension; use SilverStripe\Admin\CMSMenu; class CMSMainExtension extends LeftAndMainExtension { public function init() { // 添加新的CMS菜单项 CMSMenu::add_menu_item( 'CustomSettingsMenu', // 菜单项唯一标识 '我的自定义配置', // 菜单显示名称 'siteconfig/show?Tab=Root.CustomSettings', // 跳转URL,直接打开咱们的自定义标签页 'settings', // 可选:设置父菜单,比如放在Settings下面 10 // 排序优先级,数字越小越靠前 ); } }
同样,在app/_config/app.yml里注册这个后台扩展:
SilverStripe\Admin\LeftAndMain: extensions: - App\Extension\CMSMainExtension
4. 生效配置
最后运行dev/build?flush=all刷新你的Silverstripe配置,后台就会出现新的菜单项,点击进去就能看到你添加的文本字段啦!
额外说明
- 这种方式完全复用了Silverstripe原生的
SiteConfig存储,不用自己处理数据保存、权限控制等逻辑,和默认Settings菜单的体验一致。 - 如果确实需要完全独立的配置(不依赖SiteConfig),也可以创建一个单例Data Object(设置
private static $singleton = true;),再搭配ModelAdmin或者自定义后台控制器,但前者是更轻量的方案。
内容的提问来源于stack exchange,提问作者James Cremona
相关产品推荐
相关产品推荐

