Уровень вложенности ограничен настроками 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.
Каким образом это реализовать, помогите пожалуйста