/** * Мерджит метаданые пункта меню в порядке * - Пункт меню, помеченный как главная страница (если есть) * - Все предки пункта меню * - Пункт меню * @param $menu MenuItem * @return array */ protected function buildMenuMetaData($menu) { $chain = []; if ($this->menuManager->getMenuMap()->getMainMenu()) { $chain[] = $this->menuManager->getMenuMap()->getMainMenu(); } $chain = array_merge($chain, $menu->parents()->excludeRoots()->all(), [$menu]); $metaDataChain = array_map(function ($value) { /** @var $value MenuItem */ $metaData = []; if (!empty($value->metakey)) { $metaData['keywords'] = $value->metakey; } if (!empty($value->metadesc)) { $metaData['description'] = $value->metadesc; } if (!empty($value->robots)) { $metaData['robots'] = $value->robots; } if (!empty($value->layout_path)) { $metaData['layout'] = $value->layout_path; } return $metaData; }, $chain); return count($metaDataChain) > 1 ? call_user_func_array('yii\\helpers\\ArrayHelper::merge', $metaDataChain) : $metaDataChain[0]; }