【问题标题】:SilverStripe SiteConfig titlefield manipulationSilverStripe SiteConfig 标题字段操作
【发布时间】:2016-07-31 17:34:59
【问题描述】:

我已经设置了一个SiteConfig 扩展名(在 yml 中声明,经过测试和确认),我试图通过它将Title 字段(用于站点标题的字段)更改为只读字段。

我知道在父类SiteConfig 中,Title 字段存储在一个变量中。 SiteConfig 第 85 行:$titleField = new TextField("Title", _t('SiteConfig.SITETITLE', "Site title"))

所以在我的扩展 SiteConfigTweaks extends DataExtensions 我已经尝试过:

 public function updateCMSFields(FieldList $fields) {
     $titleField->performReadonlyTransformation();
 }

但这并不能解决问题。我在这里错过了什么?

【问题讨论】:

  • 那是你的实际代码?那应该会出错,因为 $titleField 没有定义?

标签: php silverstripe


【解决方案1】:

我建议您执行以下操作:

public function updateCMSFields(FieldList $fields)
{
    if ($titleField = $fields->dataFieldByName('Title')) {
        $fields->replaceField(
            'Title', 
            $titleField->performReadonlyTransformation()
        );
    }
}

首先您获得现有的标题字段并检查其是否存在。然后用它的只读转换变量替换该字段。

【讨论】:

  • 这行得通,谢谢 bummzack。小的后续问题,因为我需要了解有关所有这些字段操作功能的更多信息:如何将此字段的值设置为DataObject::get("SomeObject")->first()->SomeColumn?我以为我在某处读到过setValue(),但它不适用于TextField
  • @Faloude TextField 是一个表单域。 DataObject 的字段类型为DBField。这不是一回事。 setValue 可用于表单字段。对于 DB 字段,您在 DataObject 上使用 setField 或只是普通分配(例如 $myDataObject->Field = 'value';
  • 哦,是的,我知道其中的区别,我的目标是将此只读字段的值设置为从数据库中提取的值。假设我想将这个titleField 的值更改为'Hello world',我应该在哪里定义$titleField->setValue('Hello world')?稍后我会将 Hello World 替换为从数据库中提取的字符串
  • @Faloude 就在您执行performReadonlyTransformation 之前,例如。在上面代码中的$fields->replaceField( 行之前……你试过吗?
  • 我已经尝试了以下方法, if 声明中,之前 $fields->replaceField()... $titleField->setValue('Test'); 不幸的是没有运气
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多