silvershop/silverstripe-hasonefield

Edit a has_one relationship using a GridField, triggered by clicking a button.


License
BSD-2-Clause

Documentation

SilverStripe has_one field

Build Status Latest Stable Version Latest Unstable Version

Allows you to create a CMS button for creating and editing a single related object. It is actually a grid field, but just looks like a button.

demo

Installation

composer require silvershop/silverstripe-hasonefield

Usage

    use SilverShop\HasOneField\HasOneButtonField;

    private static $has_one = [
        'Address' => 'Address'
    ];

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

        $fields->addFieldToTab("Root.Main",
            HasOneButtonField::create($this, "Address")
        );

        return $fields;
    }

You must pass through the parent context ($this), so that the has_one relationship can be set by the GridFieldDetailForm.

Filtering Results

To filter the results shown in the picker use HasOneAddExistingAutoCompleter::setSearchList.

$property = HasOneButtonField::create(
    $this,
    'Address'
);

$property
    ->getConfig()
    ->getComponentByType(HasOneAddExistingAutoCompleter::class)
    ->setSearchList(Property::get()->filter("Country", "GB"));

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