[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Многомерный массив или переделка функции
oslayer
Есть вот такая функция отвечающая за формирование меню с подменю.

Уровень вложенности ограничен настроками CMS и хранится отдельно в базе данных.

Мне очень хочется сделать эту функцию независимой от уровня вложенности который лежит в базе. т.е. задавать здесь свой уровень вложенности.

private function getCategory($id_category, $id_lang = false, $id_shop = false)
{
$id_lang = $id_lang ? (int)$id_lang : (int)Context::getContext()->language->id;
$category = new Category((int)$id_category, (int)$id_lang);
if ($category->level_depth > 1)
$category_link = $category->getLink();
else
$category_link = $this->context->link->getPageLink('index');

if (is_null($category->id))
return;

$children = Category::getChildren((int)$id_category, (int)$id_lang, true, (int)$id_shop);
$selected = ($this->page_name == 'category' && ((int)Tools::getValue('id_category') == $id_category)) ? ' class="sfHoverForce"' : '';

$is_intersected = array_intersect($category->getGroups(), $this->user_groups);

// filter the categories that the user is allowed to see and browse
if (!empty($is_intersected))
{
$this->_menu .= '<li class="alt1"'.$selected.'>';
$this->_menu .= '<a href="'.$category_link.'">'.$category->name.'</a>';
/* if (count($children))*/
var_dump($children);
if (count($children))
if(count($children) & ($ddd=3))
{
$this->_menu .='<div class="st"></div><ul class="level2">';

foreach ($children as $child)
$this->getCategory((int)$child['id_category'], (int)$id_lang, (int)$child['id_shop']);

$this->_menu .='</ul>';
}
$this->_menu .= '</li>';
}

}


В приложении файл, с функциями которые используются здесь, в частности getChildren

Есть в функции приведенной выше вот такая строчка
if(count($children) & ($ddd=3))

Функционально, применение ее приводит к тому что появляются все меню и подменю. все работает ок.

Но мне необходимо ограничить вложенность всего меню уровнем 2.
1.Как только я меняю $ddd=3 на $ddd=2 корректно отображаются только меню с уровнем вложенности три, они становятся ограниченными до второго уровня. НО в этом случае пропадают вложенные меню у которых до этого был уровень два.

2Если я меняю $ddd=2 на $ddd=1 корректно отображаются только меню с уровнем вложенности два, они отображаются корректно. НО в этом случае пропадают вложенные меню у которых до этого был уровень три.

По логике хочется получить следующее
Если уровень вложенности меню 1 или 2 то вывести его. а уровень три игнорировать и не выводить.
Понимаю что приведенная ниже конструкция ошибочна но для наглядности того, что хотелось бы получить

if(count($children) & ($ddd=3) ($ddd=2))


На сайте chemirus.tmweb.ru сейчас можно видеть верхнее меню с уровнем вложенности 3 и выведенный на экран массив $children

Варианта решений вероятно два.

Порезать массив $children, убрав все подменю третьего уровня.
Каким то образом модифицировать алгоритм формирования меню с логикой - если уровень вложенности == 2 то вывести меню с максимальной вложенность == 2.

Каким образом это реализовать, помогите пожалуйста
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.