【问题标题】:Silverstripe 2.4 default value textareafield CustomSiteConfigSilverstripe 2.4 默认值 textareafield CustomSiteConfig
【发布时间】:2023-12-03 13:40:02
【问题描述】:

如何在 CustomSiteConfig 中为 textareafield 设置默认值? 这不起作用:

class CustomSiteConfig extends DataObjectDecorator {

    function extraStatics() {
        return array(
            'db' => array(
                'MyText' => 'Text'),
            'defaults' => array( 
                'MyText' => 'Bla Bla'),
            'has_one' => array(
                'Logo' => 'Image')
        );

    }

public function updateCMSFields(FieldSet $fields) {

        $fields->addFieldToTab("Root.Main", new TextareaField("MyText", "My Text"));
        $fields->addFieldToTab("Root.Main", new ImageField('Logo', 'Logo'));

    }

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    如果静态方法不起作用,可能这个未经测试(因为 2.4 太远了)sn-p 可以提供帮助:

    public function populateDefaults() {
        parent::populateDefaults();
        $this->owner->MyText = 'Bla Bla';
    }
    

    【讨论】:

      【解决方案2】:

      此代码有效,但可能不是您所期望的。

      defaults 数组允许您指定简单的静态值作为创建记录时的默认值。如果已创建记录,则不会使用默认数组中的值,即使向该数据库表添加新变量也是如此。

      如果您将数据库变量添加到Page,而不是SiteConfig,并在defaults 数组中指定它的默认值,则所有现有页面都不会获得该默认值,而是在之后创建的任何新页面那一点会。

      因为SiteConfig记录已经被创建MyText没有得到默认值。

      如果您使用您的代码创建一个新站点并运行dev/build,您会发现您的SiteConfig MyText 变量具有"bla bla" 的默认值。

      【讨论】: