Advertisement
Guest User

Extending SSViewer_BasicIteratorSupport in SilverStripe

a guest
Dec 2nd, 2016
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.97 KB | None | 0 0
  1. <?php
  2.  
  3. use SilverStripe\View\TemplateIteratorProvider;
  4.  
  5. class SSViewer_SiteIteratorSupport implements TemplateIteratorProvider
  6. {
  7.     /**
  8.      * @var int
  9.      */
  10.     protected $iteratorPos;
  11.  
  12.     /**
  13.      * @var int
  14.      */
  15.     protected $iteratorTotalItems;
  16.  
  17.     public static function get_template_iterator_variables()
  18.     {
  19.         return array(
  20.             'First',
  21.             'Last',
  22.             'FirstLast',
  23.             'Pos',
  24.             'ListClass'
  25.         );
  26.     }
  27.  
  28.     /**
  29.      * @param int $pos position in iterator
  30.      * @param int $totalItems total number of items
  31.      */
  32.     public function iteratorProperties($pos, $totalItems)
  33.     {
  34.         $this->iteratorPos = $pos;
  35.         $this->iteratorTotalItems = $totalItems;
  36.     }
  37.  
  38.     /**
  39.      * @see SilverStripe\View\SSViewer_BasicIteratorSupport::First
  40.      * @return boolean
  41.      */
  42.     public function First()
  43.     {
  44.         return $this->iteratorPos == 0;
  45.     }
  46.  
  47.     /**
  48.      * @see SilverStripe\View\SSViewer_BasicIteratorSupport::Last
  49.      * @return boolean
  50.      */
  51.     public function Last()
  52.     {
  53.         return $this->iteratorPos == $this->iteratorTotalItems - 1;
  54.     }
  55.  
  56.     /**
  57.      * @see SilverStripe\View\SSViewer_BasicIteratorSupport::FirstLast
  58.      * @return string|null
  59.      */
  60.     public function FirstLast()
  61.     {
  62.         if ($this->First() && $this->Last()) {
  63.             return 'first last';
  64.         }
  65.  
  66.         if ($this->First()) {
  67.             return 'first';
  68.         }
  69.  
  70.         if ($this->Last()) {
  71.             return 'last';
  72.         }
  73.  
  74.         return null;
  75.     }
  76.  
  77.     /**
  78.      * @see SilverStripe\View\SSViewer_BasicIteratorSupport::Pos
  79.      * @param int $startIndex
  80.      * @return int
  81.      */
  82.     public function Pos($startIndex = 1)
  83.     {
  84.         return $this->iteratorPos + $startIndex;
  85.     }
  86.  
  87.     /**
  88.      * @param int $length
  89.      * @return string
  90.      */
  91.     public function ListClass($length = 2)
  92.     {
  93.         $classes = '';
  94.  
  95.         if ($firstLast = $this->FirstLast()) {
  96.             $classes .= $firstLast;
  97.         }
  98.  
  99.         $pos = $this->Pos(0);
  100.  
  101.         if ($length - 1 === ($pos % $length)) {
  102.             $classes .= ' end';
  103.         }
  104.  
  105.         if (0 === $pos % $length) {
  106.             $classes .= ' start';
  107.         }
  108.  
  109.         $classes .= $pos % 2 ? ' even' : ' odd';
  110.  
  111.         return trim($classes, ' ');
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement