0

我正在尝试使用 TableField 来管理页面的相关链接列表。我有控制工作,除了它没有将 id 保存到 db(隐藏字段),只是标题和 url

这是使用它的正确方法吗?也这样觉得。我一直在使用这个:http ://doc.silverstripe.org/sapphire/en/reference/tablefield作为指南

一些代码:

static $has_many = array ( 
    'Linketys' => 'Linkety',        
);

$myTableField = new TableField( 
 'MyTableField', // fieldName 
 'Linkety', // sourceType 
    array( 
    'Title'=>'Title', 
    'URL'=>'URL' 
    ), // fieldList 
    array( 
    'Title'=>'TextField', 
    'URL'=>'TextField' 
    ), // fieldTypes 
    null, // filterField (legacy) 
    "Linkety.PageID", 
    $this->ID 
    ); 
    // add some HiddenFields thats saved with each new row 
    $myTableField->setExtraData(array( 
        'PageID' => $this->ID ? $this->ID : '$RecordID' 
    )); 
    $fields->addFieldToTab("Root.Content.Options", $myTableField);
4

1 回答 1

2

嗯,文档似乎有点不对劲。

这就是我使用表字段的方式,而不是使用 extraData

Linkety.php

class Linkety extends DataObject {
    public static $db = array(
        'Title'=>'Varchar',
        'URLSegment'=>'Varchar',
    );
    public static $has_one = array(
        'Page' => 'Page'
    );
}

在 Page.php 中

$myTableField = new TableField(
    'Linkety',
    'Linkety',
    array('Title'=>'Link title', 'URLSegment'=>'URL'),
    array('Title'=>'TextField','URLSegment'=>'TextField'),
    'PageID',
    $this->ID,
    $editExisting=true
);
$fields->addFieldToTab("Root.Content.Options", $myTableField);
于 2011-11-11T20:27:40.397 回答