Данный виджет, чаще всего предназначен для построения меню на сайте. При чем как главного меню, так и второстепенного. Добиться этого можно путем манипулации с его параметрами и способом вызова. Так же, виджет может подойти для вывода подразделов определенного раздела сайта (например основные разделы услуг, на главную страницу сайта).
Пример использования:
<?= \skeeks\cms\cmsWidgets\treeMenu\TreeMenuCmsWidget::widget([
'namespace' => 'top-site-menu',
'viewFile' => '@app/views/widgets/TreeMenuCmsWidget/top-site-menu',
'label' => 'Title menu',
'level' => '1',
'enabledRunCache' => \skeeks\cms\components\Cms::BOOL_N,
]); ?>
Пример содержимого файла: @app/views/widgets/TreeMenuCmsWidget/top-site-menu
<?php
/* @var $this yii\web\View */
/* @var $widget \skeeks\cms\cmsWidgets\treeMenu\TreeMenuCmsWidget */
/* @var $trees \skeeks\cms\models\Tree[] */
?>
<ul class="menu">
<? if ($trees = $widget->activeQuery->all()) : ?>
<? foreach ($trees as $tree) : ?>
<?= $this->render("menu-top-item", [
"widget" => $widget,
"model" => $tree,
]); ?>
<? endforeach; ?>
<? endif; ?>
</ul>
Пример содержимого файла: @app/views/widgets/TreeMenuCmsWidget/menu-top-item
<?php
/* @var $this yii\web\View */
/* @var $widget \skeeks\cms\cmsWidgets\treeMenu\TreeMenuCmsWidget */
/* @var $model \skeeks\cms\models\Tree */
$dir = $model->dir;
if ($model->redirect_tree_id) {
$dir = $model->redirectTree->dir;
};
$activeClass = '';
if (strpos(\Yii::$app->request->pathInfo, $dir) !== false) {
$activeClass = ' active';
}
?>
<li>
<a href="<?= $model->url; ?>" title="<?= $model->name; ?>" class="<?= $activeClass; ?>">
<?= $model->name; ?>
</a>
</li>
Пример с переопределением настроек:
<? $widget = \skeeks\cms\cmsWidgets\treeMenu\TreeMenuCmsWidget::beginWidget('menu-top-1', [
'viewFile' => '@app/views/widgets/TreeMenuCmsWidget/menu-top',
'label' => 'Верхнее меню',
'level' => '1',
'enabledRunCache' => \skeeks\cms\components\Cms::BOOL_N,
]); ?>
<?
//Переопределение шаблона, то есть не важно что укажут в настройках виджета, шаблон все равно будет использоваться этот!
$widget->viewFile = '@app/views/widgets/TreeMenuCmsWidget/menu-top-2';
//Изменение запроса
$widget->activeQuery->andWhere(['code' => 'dostavka']);
?>
<? \skeeks\cms\cmsWidgets\treeMenu\TreeMenuCmsWidget::end(); ?>
Стандартный вывод второстепенного меню каталога:
Например, при хождении по каталогу, необходимо чтобы подразделы каталога, отображались всегда слева. Для этого можно опереться на параметр текущего раздела сайта, и передать его в один из параметров виджета в качестве treePid. В этом случае, в выборке нужных разделов будет всегда участвовать условие родительского раздела. И при этом это условие будет перекрывать настройки указанные администратором через админку, а значит администратор не сможет сломать виджет, но при этом сможет поменять некоторые параметры.
<? $widget = \skeeks\cms\cmsWidgets\treeMenu\TreeMenuCmsWidget::beginWidget('menu-top-1', [
'viewFile' => '@app/views/widgets/TreeMenuCmsWidget/menu-top',
'label' => 'Вложенное меню',
'enabledRunCache' => \skeeks\cms\components\Cms::BOOL_N,
]); ?>
<?
//Если задан текущий раздел, и у него есть достаточная вложенность
if (\Yii::$app->cms->currentTree && \Yii::$app->cms->currentTree->parent && isset(\Yii::$app->cms->currentTree->parents[1]))
{
$currentParentTree = \Yii::$app->cms->currentTree->parents[1];
$widget->treePid = $currentParentTree->id; //Пере определние параметра родительского раздела
$widget->initActiveQuery(); //Применение новых настроек виджета
}
?>
<? \skeeks\cms\cmsWidgets\treeMenu\TreeMenuCmsWidget::end(); ?>