public function getItems($code, $parent_id = 0)
{
$userId = Yii::app()->getUser()->getId();
$items = Yii::app()->getCache()->get("Menu::{$code}{$parent_id}::user_{$userId}" . Yii::app()->getLanguage());
if ($items === false) {
$alias = $this->getDbConnection()->getSchema()->quoteTableName('menuItems');
$results = self::model()->with(['menuItems' => ['on' => $alias . '.parent_id = :parent_id AND ' . $alias . '.status = 1', 'params' => ['parent_id' => (int) $parent_id], 'order' => $alias . '.sort ASC, ' . $alias . '.id ASC']])->findByAttributes(['code' => $code]);
$items = [];
if (empty($results)) {
return $items;
}
$resultItems = $results->menuItems;
foreach ($resultItems as $result) {
$childItems = $this->getItems($code, $result->id);
// @TODO Если не ставить url и присутствует items, пункт не выводится, возможно баг yii
if ($result->href) {
// если адрес надо параметризовать через роутер
if (!$result->regular_link) {
$url = $result->href;
strstr($url, '?') ? list($url, $param) = explode("?", $url) : ($param = []);
if ($param) {
parse_str($param, $param);
}
$url = ['url' => (array) $url + $param, 'items' => $childItems];
} else {
// если обычная ссылка
$url = ['url' => $result->href, 'items' => $childItems];
}
} elseif ($childItems) {
$url = ['url' => ['#'], 'items' => $childItems];
} else {
$url = [];
}
$class = ($childItems ? ' submenuItem' : '') . ($result->class ? ' ' . $result->class : '');
$title_attr = $result->title_attr ? ['title' => $result->title_attr] : [];
$target = $result->target && $url ? ['target' => $result->target] : [];
$rel = $result->rel && $url ? ['rel' => $result->rel] : [];
$items[] = ['label' => $result->title, 'template' => $result->before_link . '{menu}' . $result->after_link, 'itemOptions' => ['class' => 'listItem' . $class], 'linkOptions' => ['class' => 'listItemLink'] + $title_attr + $target + $rel, 'visible' => MenuItem::model()->getConditionVisible($result->condition_name, $result->condition_denial)] + $url;
}
Yii::app()->getCache()->set("Menu::{$code}{$parent_id}::user_{$userId}" . Yii::app()->getLanguage(), $items, 0, new TagsCache('menu', $code, 'loggedIn' . $userId));
}
return $items;
}