Source of file DataObjectURLSegmentExtension.php
Size: 4,277 Bytes - Last Modified: 2021-12-24T05:18:05+00:00
/var/www/docs.ssmods.com/process/src/src/extensions/DataObjectURLSegmentExtension.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | <?php /* use SilverStripe\ORM\DataExtension; use SilverStripe\Forms\ReadonlyField; use SilverStripe\Control\Director; use SilverStripe\Core\Convert; use SilverStripe\Core\Config\Config; use SilverStripe\Forms\FieldList; */ class DataObjectURLSegmentExtension extends DataExtension { private static $db = array( 'URLSegment' => 'Varchar(200)', ); private static $indexes = array( "URLSegment" => true, ); private static $casting = array( "Breadcrumbs" => "HTMLText", "LastEdited" => "SS_Datetime", "Created" => "SS_Datetime", 'Link' => 'Text', 'RelativeLink' => 'Text', 'AbsoluteLink' => 'Text', 'TreeTitle' => 'HTMLText', ); /** * @param \FieldList $fields */ public function updateCMSFields( FieldList $fields ) { $baseLink = false; if ( method_exists( $this->owner, 'BaseLink' ) ) { $baseLink = $this->owner->BaseLink(); if ( !empty( $baseLink ) ) { $urlSegment = SiteTreeURLSegmentField::create( 'URLSegment' )->setURLPrefix( $baseLink ); $fields->insertBefore( 'Content', $urlSegment ); } } if ( !$baseLink ) { $fields->insertBefore( 'Content', ReadonlyField::create( 'URLSegment' ) ); } } public function AbsoluteLink() { return Director::absoluteURL( $this->owner->Link() ); } public function MenuTitle() { return $this->owner->getField( "Title" ); } /** * Return the title, description, keywords and language metatags. * * @todo Move <title> tag in separate getter for easier customization and more obvious usage * * @param boolean|string $includeTitle Show default <title>-tag, set to false for custom templating * * @return string The XHTML metatags */ public function MetaTags( $includeTitle = true ) { $tags = ""; if ( $includeTitle === true || $includeTitle == 'true' ) { $tags .= "<title>" . Convert::raw2xml( $this->owner->Title ) . "</title>\n"; } $generator = trim( Config::inst()->get( 'SiteTree', 'meta_generator' ) ); if ( !empty( $generator ) ) { $tags .= "<meta name=\"generator\" content=\"" . Convert::raw2att( $generator ) . "\" />\n"; } $charset = Config::inst()->get( 'ContentNegotiator', 'encoding' ); $tags .= "<meta http-equiv=\"Content-type\" content=\"text/html; charset=$charset\" />\n"; if ( $this->owner->MetaDescription ) { $tags .= "<meta name=\"description\" content=\"" . Convert::raw2att( $this->owner->MetaDescription ) . "\" />\n"; } if ( $this->owner->ExtraMeta ) { $tags .= $this->owner->ExtraMeta . "\n"; } return $tags; } public function onBeforeWrite() { $aTitle = [ $this->owner->Title, $this->owner->Name, ]; $aTitle = array_filter( $aTitle ); // If there is no URLSegment set, generate one from Title //if ((!$this->owner->URLSegment && $this->owner->Title)) { $this->owner->URLSegment = $this->generateUniqueURLSegment( reset( $aTitle ) ); //} parent::onBeforeWrite(); } /* * Generate Unique URLSegment */ public function generateUniqueURLSegment( $title ) { $URLSegment = singleton( 'SiteTree' )->generateURLSegment( $title ); $prevurlsegment = $URLSegment; $i = 1; while ( !$this->validURLSegment( $URLSegment ) ) { $URLSegment = $prevurlsegment . "-" . $i; $i++; } return $URLSegment; } public function validURLSegment( $URLSegment ) { $existingPage = $this->owner->get()->filter( array( 'URLSegment' => $URLSegment, ) )->exclude( array( 'ID' => $this->owner->ID, ) )->first(); if ( $existingPage ) { return false; } return true; } } |