Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

Пытаюсь в верхнем меню категорий вывести 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>

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

Надіслати
Поділитися на інших сайтах


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

Надіслати
Поділитися на інших сайтах

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

 

Вот скан:
post-17307-0-29724600-1457554858_thumb.png

Змінено користувачем alinalessioYandex
Надіслати
Поділитися на інших сайтах


У Вас вложенный 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
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.