Кнопка действия настраиваемого поля сетки SilverStripe добавлена ​​под существующим значком 3 точки / более - PullRequest
1 голос
/ 26 марта 2020

Я работаю над проектом SilverStripe. В моем проекте я создаю настраиваемое действие поля сетки. Я мог бы создать это. Но есть еще проблема с точки зрения пользовательского интерфейса. Кнопка пользовательского поля сетки не добавляется под существующим значком 3 точки / более, как показано на снимке экрана ниже.

enter image description here

Как вы можете видеть на снимке экрана кнопка настраиваемого действия добавлена ​​рядом со значком 3 точки / более.

Ниже приведен класс действия настраиваемого поля сетки *

class GridFieldCustomAction implements GridField_ColumnProvider, GridField_ActionProvider 
{

    public function augmentColumns($gridField, &$columns) 
    {
        if (!in_array('Actions', $columns)) {
            $columns[] = 'Actions';
        }
    }

    public function getColumnAttributes($gridField, $record, $columnName) 
    {
        return ['class' => 'grid-field__col-compact'];
    }

    public function getColumnMetadata($gridField, $columnName) 
    {
        if ($columnName === 'Actions') {
            return ['title' => ''];
        }
    }

    public function getColumnsHandled($gridField) 
    {
        return ['Actions'];
    }

    public function getColumnContent($gridField, $record, $columnName) 
    {
        if (!$record->canEdit()) {
            return;
        }

        $field = GridField_FormAction::create(
            $gridField,
            'CustomAction'.$record->ID,
            'Do Action',
            "docustomaction",
            ['RecordID' => $record->ID]
        );

        return $field->Field();
    }

    public function getActions($gridField) 
    {
        return ['docustomaction'];
    }

    public function handleAction(GridField $gridField, $actionName, $arguments, $data) 
    {
        if ($actionName !== 'docustomaction') {
            return;
        }
        // the rest of the code goes here
    }
} 

Вот как я добавил действие в поле сетки.

$config = GridFieldConfig_RelationEditor::create();
$config->addComponent(new GridFieldCustomAction());

Как я могу поместить его под существующие ... иконки?

1 Ответ

2 голосов
/ 26 марта 2020

Действия GridField группируются в «меню действий» при реализации интерфейса GridField_ActionMenuItem .

Загружен здесь :

# GridField_ActionMenu.php
/**
 * Gets the list of items setup
 *
 * @return array
 */
public function getItems($gridfield)
{
    $items = $gridfield->config->getComponentsByType(GridField_ActionMenuItem::class)->items;

    return $items;
}

Вы можете добавить свое настраиваемое действие к нему, реализовав этот интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...