网格字段不显示条目 [SilverStripe]
Grid Field not showing entries [SilverStripe]
我正在使用 MultiForm 模块通过 SilverStripe 提交长表单。此表单的逻辑在 'CampaignBriefForm.php' 中,而在 'CampaignBriefPage.php' 中添加了 gridfield CMS 字段。我有一个 CampaignBriefLead 的数据对象,它是表单创建的。
活动简介页面
private static $has_many = array(
'CampaignBriefLeads' => 'CampaignBriefLead'
);
public function CampaignBriefForm() {
return new CampaignBriefForm($this, 'CampaignBriefForm');
}
活动简介 (DO)
private static $has_one = array( "Page" => "CampaignBriefPage" );
如您所见,Campaign Brief 页面与数据对象的关系正确,您还可以看到表单本身(在单独的文件中完成)正确返回(因为它被保存在数据库中)。但是出于某种原因,网格字段不会向我显示数据库中该数据对象的内容。网格域代码如下。
$fields = parent::getCMSFields();
$contactConfig = GridFieldConfig_RelationEditor::create();
$contactConfig->getComponentByType('GridFieldDataColumns')->setDisplayFields(
array(
'CompanyName' => 'Company Name',
'StartDate' => 'Start Date',
'Duration' => 'Duration',
'WebsiteURL' => 'Website',
'Budget' => 'Budget'
));
$contactGrid = new GridField(
'CampaignBrief',
'Campaign Enquiries',
$this->CampaignBriefLeads(),
$contactConfig
);
$fields->addFieldToTab("Root.Enquiries", $contactGrid);
对我来说,这一切看起来都是正确的,应该可以工作,但由于某种原因,它不起作用。
备注
The link existing option on the gridfield allows me to link one of the entries from the DO with the gridfield weirdly?? So it saves one entry but I have to do it manually, this tells me it can see the DB but won't pull for some reason.
出于审查的原因,这里是多表单的代码,其中在提交表单后将活动简介实际保存到数据库中。
public function finish($data, $form) {
parent::finish($data, $form);
$steps = DataObject::get(
'MultiFormStep',
"SessionID = {$this->session->ID}"
);
$enquiry = new CampaignBriefLead();
foreach($steps as $step) {
$data = $step->loadData();
foreach($data as $key => $value) {
if($key == 'url' || $key == 'MultiFormSessionID' || $key == 'action_finish') {
continue;
}
if(isset($data[$key])) {
$enquiry->$key = $data[$key];
error_log($data[$key]);
}
}
}
$enquiry->write();
$this->controller->redirect('/campaign-brief/');
}
如果您需要更多信息,请告诉我。谢谢。
我猜测您提交的表单中未设置 CampaignBriefLead
PageID
。
检查数据库中的 CampaignBriefLead
table 并检查 PageID
列。如果它是空白的,则每行 null
或 0
则未设置。
为任何新提交解决此问题的一种方法是为 $enquiry:
设置 PageID
public function finish($data, $form) {
// ...
$enquiry = new CampaignBriefLead();
if ($campaignBriefPage = CampaignBriefPage::get()->first()) {
$enquiry->PageID = $campaignBriefPage->ID;
}
// ...
}
对于现有的条目,您需要更新条目以获得正确的 PageID。
我正在使用 MultiForm 模块通过 SilverStripe 提交长表单。此表单的逻辑在 'CampaignBriefForm.php' 中,而在 'CampaignBriefPage.php' 中添加了 gridfield CMS 字段。我有一个 CampaignBriefLead 的数据对象,它是表单创建的。
活动简介页面
private static $has_many = array(
'CampaignBriefLeads' => 'CampaignBriefLead'
);
public function CampaignBriefForm() {
return new CampaignBriefForm($this, 'CampaignBriefForm');
}
活动简介 (DO)
private static $has_one = array( "Page" => "CampaignBriefPage" );
如您所见,Campaign Brief 页面与数据对象的关系正确,您还可以看到表单本身(在单独的文件中完成)正确返回(因为它被保存在数据库中)。但是出于某种原因,网格字段不会向我显示数据库中该数据对象的内容。网格域代码如下。
$fields = parent::getCMSFields();
$contactConfig = GridFieldConfig_RelationEditor::create();
$contactConfig->getComponentByType('GridFieldDataColumns')->setDisplayFields(
array(
'CompanyName' => 'Company Name',
'StartDate' => 'Start Date',
'Duration' => 'Duration',
'WebsiteURL' => 'Website',
'Budget' => 'Budget'
));
$contactGrid = new GridField(
'CampaignBrief',
'Campaign Enquiries',
$this->CampaignBriefLeads(),
$contactConfig
);
$fields->addFieldToTab("Root.Enquiries", $contactGrid);
对我来说,这一切看起来都是正确的,应该可以工作,但由于某种原因,它不起作用。
备注
The link existing option on the gridfield allows me to link one of the entries from the DO with the gridfield weirdly?? So it saves one entry but I have to do it manually, this tells me it can see the DB but won't pull for some reason.
出于审查的原因,这里是多表单的代码,其中在提交表单后将活动简介实际保存到数据库中。
public function finish($data, $form) {
parent::finish($data, $form);
$steps = DataObject::get(
'MultiFormStep',
"SessionID = {$this->session->ID}"
);
$enquiry = new CampaignBriefLead();
foreach($steps as $step) {
$data = $step->loadData();
foreach($data as $key => $value) {
if($key == 'url' || $key == 'MultiFormSessionID' || $key == 'action_finish') {
continue;
}
if(isset($data[$key])) {
$enquiry->$key = $data[$key];
error_log($data[$key]);
}
}
}
$enquiry->write();
$this->controller->redirect('/campaign-brief/');
}
如果您需要更多信息,请告诉我。谢谢。
我猜测您提交的表单中未设置 CampaignBriefLead
PageID
。
检查数据库中的 CampaignBriefLead
table 并检查 PageID
列。如果它是空白的,则每行 null
或 0
则未设置。
为任何新提交解决此问题的一种方法是为 $enquiry:
设置PageID
public function finish($data, $form) {
// ...
$enquiry = new CampaignBriefLead();
if ($campaignBriefPage = CampaignBriefPage::get()->first()) {
$enquiry->PageID = $campaignBriefPage->ID;
}
// ...
}
对于现有的条目,您需要更新条目以获得正确的 PageID。