Как получить Silverstripe TableField для сохранения записей - PullRequest
0 голосов
/ 11 ноября 2011

Я пытаюсь использовать TableField для управления списком связанных ссылок на страницу.У меня работает элемент управления, за исключением того, что он не сохраняет идентификатор в БД (скрытое поле), только заголовок и 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);

1 Ответ

2 голосов
/ 12 ноября 2011

Хм, документация, кажется, немного не в порядке.

Так я использую поля таблицы, не используя extraData

Linkety.php

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

InPage.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);
...