我使用SilverStripe GridFieldExtesions进行内联编辑。我动态创建了这些字段,因此它们不作为数据库字段存在,并且在保存/打开对象后始终为空。
$i = 1;
$inline_fields = array();
do {
$field = 'Content' . $i;
$title = 'Spalte ' . $i;
$inline_fields[$field] = array(
'title' => $title,
'field' => 'TextField'
);
$i++;
} while( $i <= $this->Columns );
有没有办法像其他字段TextField::create('Foo', 'Foo', 'Bar')
一样定义内联字段的值?
修改
所以我会尝试更清楚地解释一切。 我已经获得了对象&#39;表&#39;和&#39; Row&#39;。
On&#39; Table&#39;你可以定义多少列a&#39; Row&#39;应该有。根据&#39;表&#39;,InlineFields&#39; Row&#39;中的列数。生成如上所示。
但是&#39; Row&#39;只有一个名为“内容”的字段,因为我不知道用户希望有多少列。因此,我将所有内容存储在Content1,Content2,Content3,...&#39;在内容&#39;中作为内爆阵列。
到目前为止一切顺利,但我需要在“内容1”,“内容2”,“内容3”中显示用户内容,...&#39;领域。如果这些字段不是内联字段,我会这样做TextField::create(Name, Title, Value)
所以我需要找到一种方法将预填充内容显示到内联字段中。
答案 0 :(得分:2)
在setDisplayFields
函数中,您可以指定一个callback
函数,该函数将返回您要使用的字段。
要使用此功能,您可以修改$inline_fields
数组以调用此回调:
$inline_fields[$field] = array(
'title' => $title,
'callback' => 'CustomPage::customContentField'
);
在您的类中创建将返回要使用的字段的回调函数:
static function customContentField($record, $col, $grid) {
$value = '123';
$field = TextField::create($col, $col, $value);
return $field;
}
这允许您指定$value
。但是,这不会以你想要的方式运作。在$value
中设置TextField
会设置默认值。如果要加载现有行,则不使用$value
。
这个代码会发生什么,当你创建一个新行时,它将使用指定的$value
,但在保存页面后,$value
将不会被使用。