Adds a Linkfield for gorriecoe/silverstripe-link
Composer is the recommended way of installing SilverStripe modules.
composer require gorriecoe/silverstripe-linkfield
- gorriecoe/silverstripe-link ^1.0
- silvershop/silverstripe-hasonefield 3.0.1. See Issue #11
- symbiote/silverstripe-gridfieldextensions 3.1
<?php
use gorriecoe\Link\Models\Link;
use gorriecoe\LinkField\LinkField;
class MyClass extends DataObject
{
private static $has_one = [
'Button' => Link::class
];
private static $many_many = [
'Buttons' => Link::class
];
private static $many_many_extraFields = [
'Buttons' => [
'Sort' => 'Int' // Required for all many_many relationships
]
];
/**
* CMS Fields
* @return FieldList
*/
public function getCMSFields()
{
$fields = parent::getCMSFields();
$fields->addFieldsToTab(
'Root.Main',
[
LinkField::create(
'Button',
'Button',
$this
),
LinkField::create(
'Buttons',
'Buttons',
$this
)
]
);
return $fields;
}
}
By default all link types allowed in the Link model are displayed in the edit form, but this can be configured per-field, allowing multiple configurations without requiring multiple otherwise-identical Link model subclasses.
The Title field can also be hidden, which is useful if you intend on using the URL for a link but not the user-configured Title.
This configuration can be passed into the constructor, or set later using the LinkField::setLinkConfig()
method.
// Allow only SiteTree and URL types, implicitly allow displaying title field.
$linkConfig = [
'types' => [
'SiteTree',
'URL',
],
];
LinkField::create('FieldName', 'Field Title', $this, $linkConfig);
// Allow only SiteTree and URL types.
$linkConfig = [
'types' => [
'SiteTree' => TRUE,
'URL' => TRUE,
'Email' => FALSE,
'Phone' => FALSE,
'File' => FALSE,
],
];
LinkField::create('FieldName', 'Field Title', $this, $linkConfig);
$linkConfig = [
'title_display' => false,
];
LinkField::create('FieldName', 'Field Title', $this, $linkConfig);
$linkField = LinkField::create('FieldName', 'Field Title', $this);
$linkConfig = [
'types' => [
'SiteTree',
'URL',
],
];
$linkField->setLinkConfig($linkConfig);
By default the LinkField assumes that the sort column is named Sort
. If you want to use another field name such as SortOrder
, you can specify it using the setSortColumn
method like so:
LinkField::create(
'Buttons',
'Buttons',
$this
)->setSortColumn('SortOrder')
You can also globally define the sort column. In your config.yml add the following:
gorriecoe\LinkField\LinkField:
sort_column: 'SortOrder'
We can also add a belongs_many_many relation to the Link class. In your config.yml add the following:
gorriecoe\Link\Models\Link:
belongs_many_many:
MyCustomObject : MyCustomObject.Buttons