Created
August 13, 2019 21:31
-
-
Save maxime-rainville/27b3837e5667a1e2e36822f1ee14a389 to your computer and use it in GitHub Desktop.
Isolate BlockLink field
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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