arillo/silverstripe-arbitrarysettings

为DataObjects提供任意设置

安装次数: 1,831

依赖者: 0

建议者: 0

安全性: 0

星标: 3

关注者: 9

分支: 2

公开问题: 1

类型:silverstripe-vendormodule

3.0.1 2024-07-09 08:34 UTC

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'