/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = CmsMenuItem::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); if (!($this->load($params) && $this->validate())) { return $dataProvider; } $query->andFilterWhere(['id' => $this->id, 'cms_hierarchy_item_id' => $this->cms_hierarchy_item_id, 'language' => $this->language, 'page_content_id' => $this->page_content_id, 'document_id' => $this->document_id]); $query->andFilterWhere(['like', 'name', $this->name]); return $dataProvider; }
/** * show the page for the given alias name * @menuLabel __HIDDEN__ * @param String $menuItemAlias * @return View */ public function actionAlias($menuItemAlias) { $menuItemAlias = preg_replace('/[^a-zA-Z0-9_\\-]/', '', $menuItemAlias); $menuItem = CmsMenuItem::find()->where(['alias' => $menuItemAlias])->with('pageContent')->with('cmsHierarchyItem')->one(); return $this->renderPage($menuItem); }
/** * get the complete menu / hierarchy tree for the cms navigation structure * * @functionalRight cmsBackendRead * * @param * language integer the language id to get the cms menu items for * @param * expandLevel integer the level depth, until which the folders should be marked as expanded ($expanded = true) * @param * hideMissingLanguages boolean hide or show hierarchy items that do not have a translation (cms menu item) in the requested language * @param * filterDisplayState array an array if integers indicating which displayStates should be filtered from the results (@see CmsHierarchyItem::DISPLAYSTATE_PUBLISHED_VISIBLE_IN_NAVIGATION) * @return SimpleHierarchyItem an SimpleHierarchyItem instance, containing all subnodes in a node-tree structure (children property holds children of each node) */ public static function getMenuTree($language, $expandLevel, $hideMissingLanguages, $removeHierarchyItemsWithNoContent = false, $filterDisplayState = []) { $language = intval($language); $expandLevel = intval($expandLevel); // query all hierarchy items (including hidden, etc.) $hierarchyQuery = CmsHierarchyItem::find()->orderby('parent_id ASC, position DESC')->asarray(true); // ****** IMPORTANT ******* do not modify the order by clause, since it is required by the recursive subroutine to work properly if (count($filterDisplayState) > 0) { $hierarchyQuery->where(['display_state' => $filterDisplayState]); } $hierarchyItems = $hierarchyQuery->all(); // query all menu items (check if missing should be filtered) $query = CmsMenuItem::find()->orderby('id ASC')->asarray(true); $menuItemsForLanguage = $query->all(); $menuItemIndex = []; // two dimensions, first dimension is id, second is language foreach ($menuItemsForLanguage as $menuItem) { $menuItemIndex[$menuItem['cms_hierarchy_item_id']][$menuItem['language']] = $menuItem; } $itemIndex = []; foreach ($hierarchyItems as $hierarchyItem) { // check if menu is available in current language, skip get fallback language if not if (isset($menuItemIndex[$hierarchyItem['id']]) || !$removeHierarchyItemsWithNoContent) { if (isset($menuItemIndex[$hierarchyItem['id']][$language])) { $hierarchyItem['menu_item'] = $menuItemIndex[$hierarchyItem['id']][$language]; } else { if (!$hideMissingLanguages) { // get fallback language as menu item if primary requested language not available (and missing items should not be hidden) if (isset($menuItemIndex[$hierarchyItem['id']]) && $menuItemIndex[$hierarchyItem['id']] != null) { $hierarchyItem['menu_item'] = reset($menuItemIndex[$hierarchyItem['id']]); // return first language item found } $hierarchyItem['displaying_fallback_language'] = true; } } if (isset($menuItemIndex[$hierarchyItem['id']]) && $menuItemIndex[$hierarchyItem['id']] != null) { $hierarchyItem['available_menu_items_all_languages'] = $menuItemIndex[$hierarchyItem['id']]; } else { $hierarchyItem['available_menu_items_all_languages'] = []; } if (isset($hierarchyItem['menu_item']) || !$removeHierarchyItemsWithNoContent) { if ($hideMissingLanguages && !isset($hierarchyItem['menu_item'])) { } else { $itemIndex[$hierarchyItem['id']] = $hierarchyItem; } } } } if (isset($itemIndex[DefaultController::$ROOT_HIERARCHY_ITEM_ID])) { $rootItem = new SimpleHierarchyItem($itemIndex[DefaultController::$ROOT_HIERARCHY_ITEM_ID], $expandLevel > 0, 0); unset($itemIndex[DefaultController::$ROOT_HIERARCHY_ITEM_ID]); DefaultController::populateChildrenRecursive($rootItem, $itemIndex, $expandLevel, 1); return $rootItem; } else { throw new \Exception('Missing root hierarchy item (with id = ' . DefaultController::$ROOT_HIERARCHY_ITEM_ID . '). Can not build page tree.'); } return null; }