arillo / silverstripe-arbitrarysettings
为DataObjects提供任意设置
3.0.1
2024-07-09 08:34 UTC
Requires
README
通过扩展DataObject,添加一个多值字段来存储任意设置。
要求
SilverStripe CMS ^5.0
- 要查看此模块的SilverStripe 4.x兼容版本,请参阅2分支。
- 要查看此模块的SilverStripe 3.x兼容版本,请参阅1分支或0.x版本系列。
用法
在您的DataObject中添加和设置扩展
例如,在config.yml中
MyDataObject: extensions: # adds a field called ArbitrarySettings - Arillo\ArbitrarySettings\SettingsExtension # define your settings settings: show_title: options: 0: 'No' 1: 'Yes' default: 0 label: 'Show title as image caption?' description: 'Additional description goes here' image_alignment: options: 'left': 'Left' 'right': 'Right' default: 'left' label: 'Image alignment'
注意:所有键应为字母数字(包括下划线,尚未测试其他特殊字符)且不应包含空格。
要添加字段到CMS,您可以使用辅助方法显示字段
use Arillo\ArbitrarySettings\SettingsExtension; public function getCMSFields() { $fields = parent::getCMSFields(); if ($settingsField = SettingsExtension::field_for($this)) { $fields->addFieldToTab('Root.Main', $settingsField); } return $fields; }
值的访问方式如下
$this->SettingByName('image_alignment') // returns 'left' or 'right'
在模板中
<div class="$SettingByName(image_alignment)">...</div>
SettingsField
提供了一些函数来操作字段的源
要包括或排除某些设置,可以使用
// will show all settings but show_title $settingsField->exclude(['show_title']); // will show show_title setting only $settingsField->include(['show_title']);
还可以更新设置的默认值(当然只有当它作为选项存在时)
$settingsField->updateDefaultForKey('show_title', 1);
设置预设
可以定义设置预设列表如下
Arillo\ArbitrarySettings\SettingsExtension: presets: bg: options: transparent: 'Transparent' light: 'Light blue' default: transparent label: 'Background color' imgType: options: Default: 'Default image' Hero: 'Hero image' default: Default label: 'Image type'
定义这些预设后,可以在DataObject的设置配置中引用这些键,例如
MyDataObject: extensions: - Arillo\ArbitrarySettings\SettingsExtension # define your settings settings: - bg - imgType
翻译
要翻译SettingsExtension::field_for
使用的表单字段标签,可以更改如下
en: Arillo\ArbitrarySettings\SettingsExtension: Label: 'Options'
要翻译选项,请遵循以下约定
# for a config like this: MyObject: settings: show_title: options: 0: 'No' 1: 'Yes' default: 0 label: 'Show title as image caption?' # the following translation keys can be used: en: MyObject: setting_show_title_option_0: 'Nope' setting_show_title_option_1: 'Yep' setting_show_title_label: 'Use title as image caption'