Menu::getItems PHP Method

getItems() public method

public getItems ( $code, integer $parent_id ) : array | mixed
$code
$parent_id integer
return array | mixed
    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;
    }

Usage Example

示例#1
0
    }
});
$app->error(function (\LogicException $logicException) use($app) {
    if ($app['debug']) {
        return;
    } else {
        // Aqui ira la vista error/500.html.twig
        return new Response($logicException->getMessage());
    }
});
$app->error(function (AccessDeniedHttpException $accessDeniedHttpException) use($app) {
    if ($app['debug']) {
        return;
    } else {
        $menuModelo = new Menu($app['db']);
        $menuItems = $menuModelo->getItems();
        // Respuesta en frontend
        $uriActual = $_SERVER['REQUEST_URI'];
        return $app['twig']->render('errors/403.html.twig', array('uri' => $uriActual, 'menu_items' => $menuItems));
    }
});
$app->error(function (NotFoundHttpException $notFoundHttpException) use($app) {
    if ($app['debug']) {
        return;
    } else {
        $uriActual = $_SERVER['REQUEST_URI'];
        return $app['twig']->render('errors/404.html.twig', array('uri' => $uriActual));
    }
});
$app->error(function (MethodNotAllowedHttpException $methodNotAllowedHttpException, $code) use($app) {
    if ($app['debug']) {
All Usage Examples Of Menu::getItems