Source of file LinkSection.php
Size: 3,916 Bytes - Last Modified: 2021-12-23T10:10:42+00:00
/var/www/docs.ssmods.com/process/src/code/sections/LinkSection.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 | <?php /** * * * @package silverstripe * @subpackage sections */ class LinkSection extends Section { private static $title = "Linkable list items"; private static $description = ""; /** * Database fields * @var array */ private static $db = array( 'Title' => 'Text', 'LinkType' => 'Enum("currentchildren,specify,children", "currentchildren")', 'LinkLimit' => 'Int' ); /** * Has one relationship * @var array */ private static $has_one = array( 'ParentPage' => 'Page' ); /** * Many_many relationship * @var array */ private static $many_many = array( 'LinkList' => 'SectionsLink' ); /** * {@inheritdoc } * @var array */ private static $many_many_extraFields = array( 'LinkList' => array( 'Sort' => 'Int' ) ); /** * CMS Fields * @return array */ public function getCMSFields() { $fields = parent::getCMSFields(); $TeaserConfig = GridFieldConfig_RecordEditor::create(); if ($this->LinkList()->Count() > 0) { $TeaserConfig->addComponent(new GridFieldOrderableRows()); } $fields->removeByName( array( 'ParentPageID', 'ParentPage', 'LinkLimit', 'LinkList' ) ); $fields->addFieldsToTab( 'Root.Main', array( TextareaField::create( 'Title' )->setRows(1), DropdownField::create( 'LinkType', 'Type', array( "currentchildren" => "List all sub pages of this page", "children" => "Specify a page and list all its sub pages", "specify" => "Specify each link" ) ), DisplayLogicWrapper::create( TreeDropdownField::create( 'ParentPageID', 'Select a page', 'SiteTree' ) )->displayIf("LinkType")->isEqualTo("children")->end(), DisplayLogicWrapper::create( NumericField::create( 'LinkLimit', 'Limit links' ) ->setDescription("0 equals unlimited amount.") )->displayIf("LinkType")->isNotEqualTo("specify")->end(), DisplayLogicWrapper::create( GridField::create( 'LinkList', 'Current Link(s)', $this->LinkList(), $TeaserConfig ) )->displayIf("LinkType")->isEqualTo("specify")->end() ) ); $this->extend('updateCMSFields', $fields); return $fields; } public function ListLinks() { switch ($this->LinkType) { case 'specify': return $this->LinkList(); break; case 'children': $currentPage = Director::get_current_page(); return $this ->ParentPage() ->Children() ->Limit($this->LinkLimit) ->Exclude( array( "ID" => $currentPage->ID ) ); break; case 'currentchildren': default: $currentPage = Director::get_current_page(); return $currentPage ->Children() ->Limit($this->LinkLimit); break; } } } |