/** * Prepares the data provider that should return the requested collection of the models. * @param string $id the primary key of the model. * @return ActiveDataProvider */ protected function prepareDataProvider($id) { if ($this->prepareDataProvider !== null) { return call_user_func($this->prepareDataProvider, $this); } return new ActiveDataProvider(['query' => $this->level && $this->level !== 1 ? MenuItem::find()->where(['menu_id' => $id])->andWhere(['<', 'depth', $this->level]) : MenuItem::find()->where(['menu_id' => $id])->roots()]); }
public static function setMenuItemOptions(MenuItem $item, MenuItem $parent = null) { $itemOptions = ['tag' => 'li']; $linkOptions = []; if ($parent && $parent->items_display == MenuItem::DISPLAY_GRID) { $itemOptions['tag'] = 'div'; $itemOptions['class'] = $parent->items_css_classes; } $itemOptions = array_merge_recursive($itemOptions, $item->getHtmlAttributes()); $children = $item->children; if ($children) { switch ($item->items_display) { case MenuItem::DISPLAY_DROPDOWN: Html::addCssClass($itemOptions, 'dropdown'); //$linkOptions['data-toggle'] = 'dropdown'; $linkOptions['aria-haspopup'] = "true"; $linkOptions['aria-expanded'] = "false"; Html::addCssClass($linkOptions, 'dropdown-toggle'); $item->label .= ' <span class="caret"></span>'; break; case MenuItem::DISPLAY_FULL_WIDTH_DROPDOWN: Html::addCssClass($itemOptions, 'dropdown dropdown-full-width'); //$linkOptions['data-toggle'] = 'dropdown'; $linkOptions['aria-haspopup'] = "true"; $linkOptions['aria-expanded'] = "false"; Html::addCssClass($linkOptions, 'dropdown-toggle'); $item->label .= ' <span class="caret"></span>'; break; case MenuItem::DISPLAY_GRID: Html::addCssClass($itemOptions, 'dropdown dropdown-full-width'); //$linkOptions['data-toggle'] = 'dropdown'; $linkOptions['aria-haspopup'] = "true"; $linkOptions['aria-expanded'] = "false"; Html::addCssClass($linkOptions, 'dropdown-toggle'); $item->label .= ' <span class="caret"></span>'; break; } } $item->setHtmlAttributes($itemOptions); $item->setLinkHtmlAttributes($linkOptions); }
/** * Prepares the data provider that should return the requested collection of the models. * @param string $id the primary key of the model. * @return ActiveDataProvider */ protected function prepareDataProvider($id) { if ($this->prepareDataProvider !== null) { return call_user_func($this->prepareDataProvider, $this); } $query = MenuItem::find()->where(['menu_id' => $id]); $data = \Yii::$app->getRequest()->getBodyParams(); $string = isset($data['string']) ? $data['string'] : ''; if ($this->searchableAttributes) { $condition = ['or']; foreach ($this->searchableAttributes as $attribute) { $condition[] = ['like', $attribute, $string]; } $query->andWhere($condition); /** @var $models MenuItem[] */ $models = $query->all(); foreach ($models as $model) { $query->union($model->parents()); } } return new ActiveDataProvider(['query' => $query]); }
/** * @inheritdoc */ protected function getModelClass() { return MenuItem::className(); }
/** * @inheritdoc */ public function actions() { return array_merge(parent::actions(), ['roots' => ['class' => 'im\\cms\\rest\\controllers\\MenuItemsAction', 'modelClass' => MenuItem::className()], 'search' => ['class' => 'im\\cms\\rest\\controllers\\MenuItemsSearchAction', 'modelClass' => $this->modelClass]]); }
/** * @inheritdoc */ public function run() { $items = MenuItem::find()->where(['menu_id' => 1, 'status' => MenuItem::STATUS_ACTIVE])->all(); $items = TreeHelper::buildNodesTree($items); return $this->render('menu/menu', ['widget' => $this, 'items' => $items, 'level' => 1]); }
/** * @return \yii\db\ActiveQuery */ public function getItems() { return $this->hasMany(MenuItem::className(), ['menu_id' => 'id']); }