Соединить ссылки при рекурсии
Есть такой код
private function tree(array &$items, ItemInterface $menu, string $url = null): ItemInterface
{
if (!$items) {
return $menu;
}
foreach ($items as $item) {
$menuOptions['label'] = $item['title'];
if ($item['lvl'] !== 1) {
$menuOptions['uri'] = $item['alias'];
}
$menuItem = $this->factory->createItem("{$item['title']}_{$item['id']}", $menuOptions);
$menuItem->setAttribute('class', 'nav-item');
$menuItem->setLinkAttribute('class', 'nav-link');
$menuItem->setLabelAttribute('class', 'large-menu-title');
$menuItem->setChildrenAttribute('class', 'dropdown-menu dropdown-large-menu');
if (!empty($item['banner'])) {
$menuItem->setAttributes(['image' => $item['banner']]);
}
if (!empty($item['__children'])) {
$menuItem->setAttribute('class', 'nav-item dropdown');
$this->tree($item['__children'], $menuItem, $url);
}
$menu->addChild($menuItem);
}
return $menu;
}
Мне нужно чтобы при рекурсии ссылки не обновлялись, а наоборот соединялись с предыдущей ссылкой например site.ru/catalog/man/shoes/snikkers/..../.../...
я никак не могу добится такого результата.
Ответы (1 шт):
Автор решения: borzz.one
→ Ссылка
Решил проблему вот таким образом.
private function tree(array &$items, ItemInterface $menu, string $url = null): ItemInterface
{
if (!$items) {
return $menu;
}
foreach ($items as $item) {
$link = "{$url}/{$item['alias']}";
$menuOptions['label'] = $item['title'];
$menuOptions['uri'] = $link;
$menuItem = $this->factory->createItem("{$item['title']}_{$item['id']}", $menuOptions);
$menuItem->setAttribute('class', 'nav-item');
$menuItem->setLinkAttribute('class', 'nav-link');
$menuItem->setLabelAttribute('class', 'large-menu-title');
$menuItem->setChildrenAttribute('class', 'dropdown-menu dropdown-large-menu');
if (!empty($item['banner'])) {
$menuItem->setAttributes(['image' => $item['banner']]);
}
if (!empty($item['__children'])) {
$menuItem->setAttribute('class', 'nav-item dropdown');
$this->tree($item['__children'], $menuItem, $link);
}
$menu->addChild($menuItem);
}
return $menu;
}