Source of file URLSegmentable.php
Size: 2,089 Bytes - Last Modified: 2021-12-23T10:21:36+00:00
/var/www/docs.ssmods.com/process/src/src/Model/URLSegmentable.php
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | <?php namespace SilverCart\Model; use SilverCart\Dev\Tools; /** * * @package SilverCart * @subpackage Model * @author Sebastian Diel <sdiel@pixeltricks.de> * @since 03.11.2020 * @copyright 2020 pixeltricks GmbH * @license see license file in modules root directory * * @mixin \SilverStripe\ORM\DataObject; */ trait URLSegmentable { /** * The generated URL segment. * * @var string[] */ protected static $generatedURLSegment = []; /** * Requires the default records. * * @return void */ public function requireDefaultURLSegmentableRecords() : void { foreach (self::get()->filter('URLSegment', null) as $expansion) { /* @var $expansion Expansion */ $expansion->generateURLSegment(); } } /** * Generates the URL segment. * * @return string */ public function generateURLSegment() : string { $index = 2; $urlSegment = $urlSegmentBase = Tools::string2urlSegment($this->Title); do { $existing = self::get() ->exclude('ID', $this->ID) ->filter('URLSegment', $urlSegment) ->count(); if ($existing > 0) { $urlSegment = "{$urlSegmentBase}-{$index}"; $index++; } } while ($existing > 0); self::$generatedURLSegment[$this->ID] = $urlSegment; $this->setField('URLSegment', $urlSegment); $this->write(); return $urlSegment; } /** * Returns the URL segment. * * @return string */ public function getOrGenerateURLSegment() : string { $urlSegment = $this->getField('URLSegment'); if (empty($urlSegment) && array_key_exists($this->ID, self::$generatedURLSegment) ) { $urlSegment = self::$generatedURLSegment[$this->ID]; } if (empty($urlSegment)) { $urlSegment = $this->generateURLSegment(); } return $urlSegment; } } |