【问题标题】:Grid Field not showing entries [SilverStripe]网格字段不显示条目 [SilverStripe]
【发布时间】:2015-07-13 15:09:03
【问题描述】:

我正在使用 MultiForm 模块通过 SilverStripe 提交长表单。此表单的逻辑位于“CampaignBriefForm.php”中,而网格字段 CMS 字段被添加到“CampaignBriefPage.php”中。我有一个 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 页面与数据对象具有正确的关系,并且您还可以看到表单本身(在单独的文件中完成)正在正确返回(因为它已保存在 DB 中)。然而,出于某种原因,网格字段不会向我显示该数据对象的数据库中的内容。网格字段代码如下。

$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);

对我来说,这一切看起来都是正确的,应该可以工作,但由于某种原因它不起作用。

注意

网格字段上的链接现有选项允许我奇怪地将 DO 中的条目之一与网格字段链接?所以它保存了一个条目,但我必须手动完成,这告诉我它可以看到数据库但由于某种原因不会拉动。

出于审查的原因,这里是多表单的代码,其中活动简介潜在客户在表单提交后实际保存到数据库中。

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/');
}

如果您需要更多信息,请告诉我。谢谢。

【问题讨论】:

    标签: php silverstripe


    【解决方案1】:

    我猜CampaignBriefLead PageID 没有在您的表单提交中设置。

    检查数据库中的CampaignBriefLead 表并检查PageID 列。如果它是空白的,每行的null0 那么它没有被设置。

    为任何新提交解决此问题的一种方法是为 $enquiry 设置PageID

    public function finish($data, $form) {
    
        // ...
    
        $enquiry = new CampaignBriefLead();
    
        if ($campaignBriefPage = CampaignBriefPage::get()->first()) {
            $enquiry->PageID = $campaignBriefPage->ID;
        }
    
        // ...
    }
    

    对于现有条目,您需要更新条目以具有正确的 PageID。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多