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\basic\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]; }