Skip to content

Instantly share code, notes, and snippets.

@maxime-rainville
Created August 13, 2019 21:31
Show Gist options
  • Save maxime-rainville/27b3837e5667a1e2e36822f1ee14a389 to your computer and use it in GitHub Desktop.
Save maxime-rainville/27b3837e5667a1e2e36822f1ee14a389 to your computer and use it in GitHub Desktop.
Isolate BlockLink field
<?php
use DNADesign\Elemental\Extensions\ElementalPageExtension;
use DNADesign\Elemental\Models\BaseElement;
use SilverStripe\Admin\ModelAdmin;
use SilverStripe\Control\Director;
use SilverStripe\ORM\DataObject;
class TestObject extends DataObject
{
private static $table_name = 'TestObject';
private static $extensions = [ElementalPageExtension::class];
public function CMSEditLink() {
$link = 'admin/test-model-admin/TestObject/EditForm/field/TestObject/item' . $this->ID;
return Director::absoluteURL($link);
}
public function Link($action = null)
{
return '';
}
}
class TestObjectModelAdmin extends ModelAdmin
{
private static $managed_models = [TestObject::class];
private static $url_segment = 'test-model-admin';
}
class CallToActionBlock extends BaseElement
{
private static $db = [
'CallToActionLink' => 'Link',
];
private static $table_name = 'CallToActionBlock';
public function getType()
{
return 'Call to action block';
}
/**
* For the frontend, return a parsed set of data for use in templates
*
* @return ArrayData|null
*/
public function CallToActionLink()
{
return $this->decodeLinkData($this->getField('CallToActionLink'));
}
/**
* Given a set of JSON data, decode it, attach the relevant Page object and return as ArrayData
*
* @param string $linkJson
* @return ArrayData|null
*/
protected function decodeLinkData($linkJson)
{
if (!$linkJson || $linkJson === 'null') {
return;
}
$data = ArrayData::create(json_decode($linkJson));
// Link page, if selected
if ($data->PageID) {
$data->setField('Page', self::get_by_id(SiteTree::class, $data->PageID));
}
return $data;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment