Source of file SSViewer_ExtraIterators.php
Size: 2,585 Bytes - Last Modified: 2021-12-23T10:04:37+00:00
/var/www/docs.ssmods.com/process/src/src/Helpers/SSViewer_ExtraIterators.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 | <?php namespace Restruct\CMSTweaks\Helpers { use SilverStripe\View\TemplateIteratorProvider; /** * Provides some extra iterator properties to SSviewer when looping in templates */ class SSViewer_ExtraIterators implements TemplateIteratorProvider { protected $iteratorPos; // 0 based protected $iteratorTotalItems; public static function get_template_iterator_variables() { return [ 'GroupSize', 'PosInGroup', 'FirstOfGroup', 'LastOfGroup', 'FirstLastOfGroup', 'GroupOfGroups', ]; } /** * Set the current iterator properties - where we are on the iterator. * * @param int $pos position in iterator * @param int $totalItems total number of items */ public function iteratorProperties($pos, $totalItems) { $this->iteratorPos = $pos; $this->iteratorTotalItems = $totalItems; } /** * Group methods * * @return int */ public function GroupSize($divideInGroups = false) { if ( !$divideInGroups ) return $this->iteratorTotalItems; return ceil($this->iteratorTotalItems / $divideInGroups); } public function PosInGroup($divideInGroups = false, $startIndex = 1) { return $this->iteratorPos % $this->GroupSize($divideInGroups) + $startIndex; } public function FirstOfGroup($divideInGroups = false) { return $this->PosInGroup($divideInGroups) == 1; } public function LastOfGroup($divideInGroups) { return $this->PosInGroup($divideInGroups) == $this->GroupSize($divideInGroups) || $this->iteratorPos == $this->iteratorTotalItems - 1; } public function FirstLastOfGroup($divideInGroups) { if ( $this->FirstOfGroup($divideInGroups) && $this->LastOfGroup($divideInGroups) ) { return 'first-of-group last-of-group'; } if ( $this->FirstOfGroup($divideInGroups) ) return 'first-of-group'; if ( $this->LastOfGroup($divideInGroups) ) return 'last-of-group'; } public function GroupOfGroups($divideInGroups = false) { $groupsize = $this->GroupSize($divideInGroups); return ceil(( $this->iteratorPos + 1 ) / $groupsize); //pos = 0 based } } } |