Silverstripe 4 getCMSFields_forPopup и GridField - PullRequest
1 голос
/ 18 июня 2020

Возьмем это снова через много лет. Могу ли я не использовать gridfield во всплывающем компоненте cms? Здесь у меня есть сущность Ingredient, и я хочу добавить Ingredients из db в сущность Recipe. Даже простой не появляется.

Рецепт. php

    ...

    private static $db = [
        'Title' => 'Varchar',
        'Description' => 'Text',
    ];

    private static $has_one = [];

    private static $many_many = [
        'Ingredients' => Ingredient::class,
    ];


    public function getCMSFields_forPopup()
    {
        $gridConfig = GridFieldConfig_RelationEditor::create()->addComponents(
            new GridFieldDeleteAction('unlinkrelation')
        );

        $grid = GridField::create(
            'Ingredients',
            'Ingredients',
            $this->Ingredients(),
            $gridConfig,
        );

        $fields = FieldList::create(
            TextField::create('Title'),
            TextareaField::create('Description'),
            $grid
        );

        // or maybe something like..
        // $fields->addFieldToTab('Main', 'Ingredients', 'Ingredients', $grid);


        return $fields;
    }

1 Ответ

1 голос
/ 18 июня 2020

getCMSFields_forPopup отсутствует в Silverstripe 4 или Silverstripe 3. Это было в Silverstripe 2.

Попробуйте вместо этого getCMSFields.

public function getCMSFields()
{
    $fields = parent::getCMSFields();

    $ingredientsFieldConfig = GridFieldConfig_RelationEditor::create();

    $ingredientsField = GridField::create(
        'Ingredients',
        'Ingredients',
        $this->Ingredients(),
        $ingredientsFieldConfig
    );

    $fields->addFieldToTab('Root.Main', $ingredientsFieldConfig);

    return $fields;
}
...