mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
c9b6e9bac0
API Update behaviour of form fields to use standard template lookup mechanism API Support custom "type" parameter to template lookup
100 lines
2.2 KiB
PHP
100 lines
2.2 KiB
PHP
<?php
|
|
|
|
use SilverStripe\ORM\DataObject;
|
|
use SilverStripe\ORM\FieldType\DBField;
|
|
|
|
/**
|
|
* Adds a "level up" link to a GridField table, which is useful when viewing
|
|
* hierarchical data. Requires the managed record to have a "getParent()"
|
|
* method or has_one relationship called "Parent".
|
|
*
|
|
* @package forms
|
|
* @subpackage fields-gridfield
|
|
*/
|
|
class GridFieldLevelup extends Object implements GridField_HTMLProvider {
|
|
|
|
/**
|
|
* @var integer - the record id of the level up to
|
|
*/
|
|
protected $currentID = null;
|
|
|
|
/**
|
|
* sprintf() spec for link to link to parent.
|
|
* Only supports one variable replacement - the parent ID.
|
|
* @var string
|
|
*/
|
|
protected $linkSpec = '';
|
|
|
|
/**
|
|
* @var array Extra attributes for the link
|
|
*/
|
|
protected $attributes = array();
|
|
|
|
/**
|
|
*
|
|
* @param integer $currentID - The ID of the current item; this button will find that item's parent
|
|
*/
|
|
public function __construct($currentID) {
|
|
parent::__construct();
|
|
if($currentID && is_numeric($currentID)) {
|
|
$this->currentID = $currentID;
|
|
}
|
|
}
|
|
|
|
public function getHTMLFragments($gridField) {
|
|
$modelClass = $gridField->getModelClass();
|
|
$parentID = 0;
|
|
|
|
if(!$this->currentID) {
|
|
return null;
|
|
}
|
|
|
|
$modelObj = DataObject::get_by_id($modelClass, $this->currentID);
|
|
|
|
$parent = null;
|
|
if($modelObj->hasMethod('getParent')) {
|
|
$parent = $modelObj->getParent();
|
|
} elseif($modelObj->ParentID) {
|
|
$parent = $modelObj->Parent();
|
|
}
|
|
|
|
if ($parent) {
|
|
$parentID = $parent->ID;
|
|
}
|
|
|
|
// Attributes
|
|
$attrs = array_merge($this->attributes, array(
|
|
'href' => sprintf($this->linkSpec, $parentID),
|
|
'class' => 'cms-panel-link ss-ui-button font-icon-level-up no-text grid-levelup'
|
|
));
|
|
$linkTag = FormField::create_tag('a', $attrs);
|
|
|
|
$forTemplate = new ArrayData(array(
|
|
'UpLink' => DBField::create_field('HTMLFragment', $linkTag)
|
|
));
|
|
|
|
$template = SSViewer::get_templates_by_class($this, '', __CLASS__);
|
|
return array(
|
|
'before' => $forTemplate->renderWith($template),
|
|
);
|
|
}
|
|
|
|
public function setAttributes($attrs) {
|
|
$this->attributes = $attrs;
|
|
return $this;
|
|
}
|
|
|
|
public function getAttributes() {
|
|
return $this->attributes;
|
|
}
|
|
|
|
public function setLinkSpec($link) {
|
|
$this->linkSpec = $link;
|
|
return $this;
|
|
}
|
|
|
|
public function getLinkSpec() {
|
|
return $this->linkSpec;
|
|
}
|
|
}
|