【问题标题】:How do I edit many_many_extraFields on SilverStripe 4?如何在 SilverStripe 4 上编辑 many_many_extraFields?
【发布时间】:2019-06-19 15:46:38
【问题描述】:

我在多对多关系中添加了一个额外的 Data 字段,但我不知道如何编辑它。

功能

private static $belongs_many_many = [
        'Model' => Model::class
    ];

型号

private static $many_many = [
        'Features' => Feature::class,
    ];

private static $many_many_extraFields = [
    'Features' => [
        'SortOrder' => 'Int',
        'Data' => 'Varchar'
    ]
];



-- / --

$features = Feature::get();
$searchFeaturesButton = new GridFieldAddExistingSearchButton();
$searchFeaturesButton->setSearchList($features);
$featureConfig = GridFieldConfig_RelationEditor::create();
$featureConfig->removeComponentsByType([GridFieldAddExistingAutocompleter::class, GridFieldEditButton::class, GridFieldAddNewButton::class]);
$featureConfig->addComponent(new GridFieldOrderableRows());
$featureConfig->addComponent($searchFeaturesButton);
$featureGrid = GridField::create('Features', 'Features', $this->Features(), $featureConfig);
$field->addFieldToTab('Root.Main', $featureGrid);

-- / --


如何在我的 GridField 中将Data 视为一列并使其也可编辑?

排序工作正常,因为它由 GridfieldOrderableRows() 管理

【问题讨论】:

    标签: php silverstripe silverstripe-4


    【解决方案1】:

    在 SilverStripe 3 和 4 中,我们可以使用 SilverStripe GridField Extensions 模块 GridFieldEditableColumns feature 来编辑 many_many_extraFields 数据。

    这是一个如何做到这一点的示例:

    // Features field existing search button
    $featuresGridFieldSearchButton = new GridFieldAddExistingSearchButton();
    $featuresGridFieldSearchButton->setSearchList(Feature::get());
    
    // Features field editable columns
    $featuresGridFieldEditableColumns = new GridFieldEditableColumns();
    $featuresGridFieldEditableColumns->setDisplayFields([
        'Title' => [
            'title' => 'Title',
            'field' => ReadonlyField::class,
        ],
        'Data' => [
            'title' => 'Data',
            'field' => TextField::class,
        ],
    ]);
    
    // Features field config including base GridFieldConfig_RelationEditor components, custom search button, editable columns and orderable rows
    $featuresGridFieldConfig = GridFieldConfig::create();
    $featuresGridFieldConfig->addComponent(new GridFieldButtonRow('before'));
    $featuresGridFieldConfig->addComponent($featuresGridFieldSearchButton);
    $featuresGridFieldConfig->addComponent(new GridFieldToolbarHeader());
    $featuresGridFieldConfig->addComponent(new GridFieldTitleHeader());
    $featuresGridFieldConfig->addComponent($featuresGridFieldEditableColumns);
    $featuresGridFieldConfig->addComponent(new GridFieldDeleteAction(true));
    $featuresGridFieldConfig->addComponent(new GridFieldOrderableRows());
    $featuresGridFieldConfig->addComponent(new GridFieldPageCount('toolbar-header-right'));
    $featuresGridFieldConfig->addComponent(new GridFieldPaginator());
    $featuresGridFieldConfig->addComponent(new GridFieldDetailForm());
    
    $featuresGridField = GridField::create(
        'Features',
        'Features',
        $this->Features(),
        $featuresGridFieldConfig
    );
    
    $fields->addFieldToTab('Root.Features', $featuresGridField);
    

    【讨论】:

    • 在后端工作,但不知何故没有显示在模板中。我可以很好地循环通过 $Features,但是在循环通过 $Features 时它不会得到 $Data。 'Feature' 上不存在方法 'forTemplate'
    • 我已经测试了通过前端访问$many_many_extraFields 并且它们在我的测试中工作。为了使额外的字段起作用,我们需要通过 Model 并使用 Model's Features 关系调用。
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2014-03-10
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多