伪直线网格场的值 - Silverstripe 3& GridFieldExtensions

时间:2014-12-21 16:15:37

标签: silverstripe

我使用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)

所以我需要找到一种方法将预填充内容显示到内联字段中。

1 个答案:

答案 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将不会被使用。