因此,首先免责声明:在SilverStripe方面,我有点菜鸟,但是这个困扰了我。
我正在使用GridField添加和编辑DataObject中的条目。这一切都很好,而且效果很好。我唯一不知道的是如何更改EDITABLE字段的顺序-这不是条目的初始表显示(由$ config设置),而是单击“添加”后的实际输入字段新”或编辑记录。
目前,“ image uploadForm”和“ Signature”<select>
框位于“ Body HTMLText”字段下方,这很杂乱,无法正常工作。我希望它们位于“摘要”元素正下方的顶部。
我尝试过使用changeFieldOrder(),但是在GridField对象类型上不起作用,并且$ fields对输入元素一无所知(我dump()对其进行了研究,然后进行了观察)。
MediaReleaseItem.php:
class MediaReleaseItem extends DataObject {
static $db = array (
'Title' => 'Varchar',
'DateUpdated' => 'Date',
'Summary' => 'Varchar',
'Image' => 'Varchar',
'Body' => 'HTMLText',
);
private static $has_one = array(
"Image" => "Image",
"MediaReleaseItem" => "MediaReleases",
"Signature" => "MediaReleaseSignature",
);
}
和MediaReleases.php:
class MediaReleases extends Page {
private static $has_many = array(
"MediaReleaseItems" => "MediaReleaseItem",
"Signature" => "MediaReleaseSignature",
);
function getCMSFields() {
$fields = parent::getCMSFields();
$config = GridFieldConfig_RecordEditor::create();
$config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
'Title'=> 'Title',
'DateUpdated' => 'Date',
'Summary' => 'Summary',
));
$mediaReleasesField = new GridField(
'MediaReleaseItem', // Field name
'Media Releases', // Field title
$this->MediaReleaseItems(),
$config
);
$fields->addFieldToTab('Root.MediaReleaseItems', $mediaReleasesField);
return $fields;
}
}
(签名只是在另一个选项卡上具有另一个GridField的另一个DataObject,我没有包括它的代码,因为它几乎是相同的。)
因此,您的意思是当您编辑MediaReleaseItem
字段时,字段不是您想要的样子吗?
简单:只需getCMSFields()
在类上定义一个方法MediaReleaseItem
。
<?php
class MediaReleaseItem extends DataObject {
private static $db = array (
'Title' => 'Varchar',
'DateUpdated' => 'Date',
'Summary' => 'Varchar',
'Image' => 'Varchar',
'Body' => 'HTMLText',
);
private static $has_one = array(
"Image" => "Image",
"MediaReleaseItem" => "MediaReleases",
"Signature" => "MediaReleaseSignature",
);
public function getCMSFields() {
$arrayOfSignatures = MediaReleaseSignature::get()->map()->toArray();
$fields = FieldList::create(array(
TextField::create('Title', 'Title for this Item'),
DateField::create('DateUpdated', 'Updated')->setConfig('showcalendar', true),
TextField::create('Image', 'Image'),
// not sure if it works to have both a DB field and a has_one with the same name
UploadField::create('ImageID', 'Image'),
DropdownField::create('Signature', 'Signature', $arrayOfSignatures),
// you can add more fields here
));
// but you can also add fields here
$fields->insertBefore(TextField::create('Summay', 'Summary'), 'DateUpdated');
$fields->push(HTMLEditorField::create('Body', 'Body Content'));
return $fields;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句