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 に答える