yii\widgets\Menu::normalizeItems PHP Method

normalizeItems() protected method

Normalizes the [[items]] property to remove invisible items and activate certain items.
protected normalizeItems ( array $items, boolean &$active ) : array
$items array the items to be normalized.
$active boolean whether there is an active child menu item.
return array the normalized menu items
    protected function normalizeItems($items, &$active)
    {
        foreach ($items as $i => $item) {
            if (isset($item['visible']) && !$item['visible']) {
                unset($items[$i]);
                continue;
            }
            if (!isset($item['label'])) {
                $item['label'] = '';
            }
            $encodeLabel = isset($item['encode']) ? $item['encode'] : $this->encodeLabels;
            $items[$i]['label'] = $encodeLabel ? Html::encode($item['label']) : $item['label'];
            $hasActiveChild = false;
            if (isset($item['items'])) {
                $items[$i]['items'] = $this->normalizeItems($item['items'], $hasActiveChild);
                if (empty($items[$i]['items']) && $this->hideEmptyItems) {
                    unset($items[$i]['items']);
                    if (!isset($item['url'])) {
                        unset($items[$i]);
                        continue;
                    }
                }
            }
            if (!isset($item['active'])) {
                if ($this->activateParents && $hasActiveChild || $this->activateItems && $this->isItemActive($item)) {
                    $active = $items[$i]['active'] = true;
                } else {
                    $items[$i]['active'] = false;
                }
            } elseif ($item['active']) {
                $active = true;
            }
        }
        return array_values($items);
    }

Usage Example

Esempio n. 1
0
 protected function normalizeItems($items, &$active)
 {
     $currentUrl = ltrim(P::$app->getRequest()->getUrl(), '/');
     $langList = [];
     foreach (P::$app->getLocale()->enableLocales as $lang) {
         if ($lang !== P::$app->getLocale()->defaultLocale) {
             $langList[] = $lang;
         }
     }
     foreach ($items as $i => $item) {
         if (!isset($item['lang'])) {
             throw new InvalidConfigException('The "lang" element is required for each item.');
         }
         if (in_array($item['lang'], $langList)) {
             $items[$i]['url'] = '/' . $item['lang'] . '/' . $currentUrl;
         } else {
             $items[$i]['url'] = $currentUrl;
         }
     }
     return parent::normalizeItems($items, $active);
 }
All Usage Examples Of yii\widgets\Menu::normalizeItems