我的(部分)DataObject:
class InternalExternalLink extends DataObject {
private static $db = array(
'ExternalLink' => 'VarChar(256)',
'LinkLabel' => 'VarChar(256)',
"LinkType" => "Enum(array('Internal', 'External','Attachment'))"
);
private static $has_one = array(
'InternalLink' => 'SiteTree',
'Attachment' => 'File'
);
function getCMSFields() {
$fields = new FieldList(array(
$internal = DropdownField::create("InternalLinkID", "Choose a page", SiteTree::get()->map()->toArray())->setEmptyString("-- choose --"),
));
return $fields;
}
添加我将此添加到Page:
class Page extends SiteTree {
private static $has_many = array(
'Links' => 'InternalExternalLink'
);
function getCMSFields() {
$fields = parent::getCMSFields();
$gridField = new GridField('Links', 'Links', $this->Links(), GridFieldConfig_RecordEditor::create());
$fields->addFieldsToTab('Root.Main', $gridField);
return $fields;
}
问题是当通过网格字段添加链接时,它会自动假定Link.InternalLink是父页面而不是任何页面,并隐藏页面选择下拉列表。例如。如果我正在编辑about-us页面,那么我通过gridfield添加的每个Link数据对象都会自动将其InternalLink设置为about-us页面。
如何更改此假设以允许我通过下拉列表选择任何页面?
答案 0 :(得分:0)
试试这个:
1)给DataObject一个" Parent"关系:
class InternalExternalLink extends DataObject {
private static $has_one = array(
'Parent' => 'DataObject',
'InternalLink' => 'SiteTree',
'Attachment' => 'File'
);
...
}
2)指定" Parent"在页面的has_many:
class LinkTestPage extends SiteTree {
private static $has_many = array(
'Links' => 'InternalExternalLink.Parent'
);
...
}
答案 1 :(得分:0)
这里的问题是InternalExternalLink
与SiteTree
之间的关系,而您正尝试在Page
上定义与之关系。由于从has_one
到InternalExternalLink
没有Page
,并且您使用的是较旧版本的3.1,因此会查找has_one
的默认Parent
。
要解决此问题,您可以将InternalLink
关系更改为指向Page
而不是SiteTree
,或使用DataExtension
添加has_many
关系到SiteTree
。