Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Четырех-уровневое верхнее меню.


 Погделиться

Рекомендованные сообещёния

Пыиюсь в верхнем меню категорий вывести 4 уровня. Но не получается. Посмотрите, может подскажете в чем ошибка?

 

Контроллер header.php

foreach ($categories as $category) {
			if ($category['top']) {
				// Level 2
				$children_data = array();

				$children = $this->model_catalog_category->getCategories($category['category_id']);

				foreach ($children as $child) {
                    $children_data2 = array();
                    $children2 = $this->model_catalog_category->getCategories($child['category_id']);

                    $children_data3 = array();
                    $children3 = $this->model_catalog_category->getCategories($child['category_id']);

                    foreach ($children2 as $child2) {

                        $children_data2[] = array(
                        'name'  => $child2['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
                        'href'  => $this->url->link('product/category', 'path=' . $child['category_id'] . '_' . $child2['category_id']),'children' => $children_data3,
                        );
                    }

                    $filter_data = array(
                        'filter_category_id'  => $child['category_id'],
                        'filter_sub_category' => true
                    );

                    $children_data[] = array(
                        'name'  => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
                        'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']),
                        'children' => $children_data2,
                    );
                }

				// Level 1
				$data['categories'][] = array(
					'name'     => $category['name'],
					'children' => $children_data,
					'column'   => $category['column'] ? $category['column'] : 1,
					'href'     => $this->url->link('product/category', 'path=' . $category['category_id'])
				);
			}
		}

В шаблоне header.tpl

<nav id="menu" class="navbar">
        <div class="navbar-header"><span id="category" class="visible-xs"><?php echo $text_category; ?></span>
          <button type="button" class="btn btn-navbar navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"><i class="fa fa-bars"></i></button>
        </div>
        <div class="collapse navbar-collapse navbar-ex1-collapse">
          <ul class="nav navbar-nav">
            <?php foreach ($categories as $category) { ?>
            <?php if ($category['children']) { ?>
            <li class="dropdown"><a href="<?php echo $category['href']; ?>" class="dropdown-toggle" data-toggle="dropdown"><?php echo $category['name']; ?></a>
              <div class="dropdown-menu">
                <div class="dropdown-inner">
                  <?php foreach (array_chunk($category['children'], ceil(count($category['children']) / $category['column'])) as $children) { ?>
                  <ul class="list-unstyled">
                    <?php foreach ($children as $child) { ?>
                      <li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a>
                          <?php     if ($child['children']) {?>
                               <div class="child"><ul class="list-unstyled">
                               <?php foreach ($child['children'] as $child) { ?>
                                  <li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a>
                                    <?php if ($child['children']) {?>
                                         <div class="child"><ul class="list-unstyled">
                                         <?php foreach ($child['children'] as $child) { ?>
                                            <li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a>
                                            </li>
                                        <?php } ?>
                                        </ul></div>
                                    <?php } ?>
                                  </li>
                              <?php } ?>
                              </ul></div>
                          <?php } ?>
                      </li>
                    <?php } ?>
                  </ul>
                  <?php } ?>
                </div>
                <a href="<?php echo $category['href']; ?>" class="see-all"><?php echo $text_all; ?> <?php echo $category['name']; ?></a> </div>
              </li>
              <?php } else { ?>
              <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></li>
              <?php } ?>
              <?php } ?>
              <li><a href="index.php?route=information/contact">Коникты</a></li>
            </ul>
          </div>
        </nav>

В итоге выводится три уровня меню. Четвертый не хочет. Что я не ик сгделал?

Ссылка на комменирий
Погделиться на других сайих


А что даст икое меню в этот версии?Даже если всё это сгделать,кликабельной ссылкой бугдет самая последняя категория.Разве нет?Осильные врогде как по клику будут открывать следующую....

Ссылка на комменирий
Погделиться на других сайих

Сейчас выводится три уровня. При навегдении на первый уровень у меня показываются все вложенные категории до третьего уровня. На любую можно кликнуть. Только четвертот не хваиет.

 

Вот скан:

Изменено пользователем alinalessioYandex
Ссылка на комменирий
Погделиться на других сайих


У Вас вложенный foreach с именем, совпадающим с внешним foreach

 

Циклы {foreach} могут быть вложенными при условии, что их имена будут уникальными.

Ссылка на комменирий
Погделиться на других сайих


У Вас вложенный foreach с именем, совпадающим с внешним foreach

 

Циклы {foreach} могут быть вложенными при условии, что их имена будут уникальными.

Не совсем понял, ггде именно совпадают?

foreach ($categories as $category) {

    ...

    foreach ($children as $child) {

        ...
   
        foreach ($children2 as $child2) {

Вложены друг в друга, но не повторяются. Или я не ик понял?

Ссылка на комменирий
Погделиться на других сайих



<?php if ($child['children']) {?>

<div class="child"><ul class="list-unstyled">

<?php foreach ($child['children'] as $child) { ?>

<li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a>

<?php if ($child['children']) {?>

<div class="child"><ul class="list-unstyled">

<?php foreach ($child['children'] as $child) { ?>

<li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a>

</li>

<?php } ?>

</ul></div>

<?php } ?>

</li>

Ссылка на комменирий
Погделиться на других сайих


Не совсем понял, ггде именно совпадают?

foreach ($categories as $category) {

    ...

    foreach ($children as $child) {

        ...
   
        foreach ($children2 as $child2) {

Вложены друг в друга, но не повторяются. Или я не ик понял?

 

Нужен еещё один уровень вложенности

foreach ($children as $child) {

...

foreach ($children2 as $child2) {
...

foreach ($children3 as $child3) {

А у Вас только 

$children_data2 = array();
$children2 = $this->model_catalog_category->getCategories($child['category_id']);

$children_data3 = array();
$children3 = $this->model_catalog_category->getCategories($child['category_id']); //т.е. $children2 == $children3
Ссылка на комменирий
Погделиться на других сайих


Запуился. Перепропотому чтовал вложенность добавить, но не получается. Вы имеете ввиду, что у меня неправильно вложенность сейчас написана или у меня еещё одного уровня нет? Уровней вложенности врогде 4, а зачем еещё один?

Ссылка на комменирий
Погделиться на других сайих


Это же Вы объявили массив $children_data3 и ничего с ним не гделаете, он ик и осиется пустым

 

 

А неправильно вложенность написана в файле tpl.

 

<?php foreach ($child['children'] as $child) { ?>
<li><a href="<?php echo $child['href']; ?>"><?php echo $child['name']; ?></a>
<?php if ($child['children']) {?>
<div class="child"><ul class="list-unstyled">
<?php foreach ($child['children'] as $child) { ?>

 

Попробуйте сначала правильно сформировать выходной массив $data['categories'][] в header.php

Вывести его структуру можно командой 

print_r($data);
Ссылка на комменирий
Погделиться на других сайих


Код в контроллере бугдет выглягдеть ПРИМЕРНО ик:

 

foreach ($categories as $category) 
 {
if ($category['top']) 
 {
// Level 2
$children_data = array();


$children = $this->model_catalog_category->getCategories($category['category_id']);


foreach ($children as $child) 
 {
// Level 3
                    $children_data2 = array();
                    $children2 = $this->model_catalog_category->getCategories($child['category_id']);


   foreach ($children2 as $child2) 
     {
// Level 4
                        $children_data3 = array();
                        $children3 = $this->model_catalog_category->getCategories($child2['category_id']);


                        foreach ($children3 as $child3) 
     {
       $children_data3[] = array('name'  => $child3['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
                             'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child3['category_id'])); 
         }
       $children_data2[] = array('name'     => $child2['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
                         'href'     => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child2['category_id']),
 'children' => $children_data3); 
 }
   $children_data[] = array('name'     => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
                    'href'     => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']),
'children' => $children_data2);
 } 


// Level 1
$this->data['categories'][] = array('name'     => $category['name'],
                               'children' => $children_data,
                               'active'   => in_array($category['category_id'], $parts),
                               'column'   => $category['column'] ? $category['column'] : 1,
                               'href'     => $this->url->link('product/category', 'path=' . $category['category_id']));
 }
 }
Изменено пользователем igon
Ссылка на комменирий
Погделиться на других сайих


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.