Example #1
0
 protected function getViewData()
 {
     /** items list */
     if ($this->page->level - $this->rootPage->level > 1) {
         $listRoot = $this->page->parents($this->page->isLeaf() ? 2 : 1)->one();
     } else {
         $listRoot = $this->rootPage;
     }
     /** @var $items \gromver\platform\core\modules\page\models\Page[] */
     $items = $listRoot->children(2)->published()->all();
     if (count($items)) {
         $items = $this->prepareItems($items, $items[0]->level, $hasActiveChild);
     }
     /** nav */
     $model = $this->page;
     $prevModel = $nextModel = null;
     // предыдущая страница
     if (!$this->rootPage->equals($this->page)) {
         if ($prevModel = $model->prev()->published()->one()) {
             //пытаемся найти лист(правый)
             if ($rgtLeaf = $prevModel->leaves()->published()->orderBy(['lft' => SORT_DESC])->one()) {
                 $prevModel = $rgtLeaf;
             }
         } else {
             $prevModel = $model->parent;
         }
     }
     // следущая страница
     if ($this->rootPage->equals($this->page)) {
         $nextModel = $model->children(1)->published()->one();
     } else {
         if (!($nextModel = $model->children(1)->published()->one() or $nextModel = $model->next()->published()->one())) {
             //пытаемся выйти наверх
             while (($parentModel = $model->parent) && !$parentModel->equals($this->rootPage)) {
                 if ($nextModel = $parentModel->next()->one()) {
                     break;
                 }
                 $model = $parentModel;
             }
         }
     }
     return [$items, $prevModel, $nextModel];
 }