seppzzz
seppzzz

Reputation: 229

Silverstripe 3.4 gridfieldextensions GridFieldEditableColumns

I am using gridfieldextensions and GridFieldEditableColumns on a GridFieldConfig_RelationEditor.

How can the GridField - Actions be moved to the right?

[![enter image description here][1]][1]

class StaffCatObject extends DataObject

    private static $many_many = array(
        'Staffs' => 'Staff'
    );

    private static $many_many_extraFields = array(
        'Staffs' => array(
            'SortOrder' => 'Int',
            'Display' => 'Boolean(1)'
        ),
    );

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

.......

    $GridFieldConfig = GridFieldConfig_RelationEditor::create();
    $GridFieldConfig->removeComponentsByType('GridFieldPaginator');
    $GridFieldConfig->addComponent(new GridFieldPaginator(20));
    $GridFieldConfig->addComponent(new GridFieldEditableColumns());
    $GridFieldConfig->addComponent( new GridFieldDeleteAction());
    $items = $this->Staffs();
    if (class_exists('GridFieldOrderableRows') && !$items instanceof UnsavedRelationList) {
        $GridFieldConfig->addComponent(new GridFieldOrderableRows('SortOrder'));
    }

    $gridfield = new GridField("Staff", $this->StaffCatTitle, $this->Staffs()->sort('SortOrder'), $GridFieldConfig); //->sort('SortOrder')

    $gridfield->getConfig()->getComponentByType('GridFieldEditableColumns')->setDisplayFields(array(

        'Display' => array(
            'callback' => function ($record, $column, $gridfield) {
                    return new CheckboxField('Display');
            },
            'title' => 'Display'
            ),

        'AdImpressum' => array(
            'title' => 'Ad Impressum',
            'field' => 'CheckboxField'
            )
    ));


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

    return $fields;

class Staff extends DataObject

private static $belongs_many_many = array(
    'StaffCatObjects' => 'StaffCatObject'
);

static $summary_fields = array(
    'Thumbnail' => 'Thumbnail',
    'StaffTitle' => 'Name',
    'Email' => 'Email',
    'CheckDisplay' => 'wird angezeigt in'
);

Upvotes: 3

Views: 463

Answers (1)

g4b0
g4b0

Reputation: 951

You are appending the end of the GridField. One solution is to empty the Actions column with the following code:

$config->removeComponentsByType('GridFieldDeleteAction');
$config->removeComponentsByType('GridFieldEditButton');

Just after creating the GridField, and then readd them after adding GridFieldEditableColumns with the following code:

$config->addComponent(new GridFieldEditButton());
$config->addComponent(new GridFieldDeleteAction());

Hint: Your first initialization is unnecessary:

$GridFieldConfig = GridFieldConfig_RelationEditor::create();
$GridFieldConfig->removeComponentsByType('GridFieldPaginator');
$GridFieldConfig->addComponent(new GridFieldPaginator(20));
$GridFieldConfig->addComponent(new GridFieldEditableColumns());
$GridFieldConfig->addComponent( new GridFieldDeleteAction());

It can be done with just:

$GridFieldConfig = GridFieldConfig_RelationEditor::create(20);

More info here: https://github.com/silverstripe/silverstripe-framework/blob/3.4.5/forms/gridfield/GridFieldConfig.php#L232

Upvotes: 2

Related Questions