Меню jQuery не загружает дочерние категории PHP

У нас было настраиваемое меню jQuery, которое хорошо работало в нашем магазине OpenCart. Однако дочерние категории 2-го уровня не отображаются, PHP неверен либо в измененном, либо в оригинальном меню. Все, что имеет категорию с 2 или более глубинами, не будет отображаться.

Итак, у нас есть 2 категории http://ocart.site/opencart/index.php?route=product/category&path=25_29_59

Но вы увидите, что он не будет отображаться в главном меню на http://ocart.site/opencart

Если я добавлю обратно по умолчанию в исходное меню по умолчанию, это фактически перерывает меню. Вы можете увидеть сравнение старого и нового меню в http://ocart.site/defaultmenutoJQ.html

Что-то блокирует загрузку дисплея где-нибудь, любые идеи о том, что это может быть?

Вот весь соответствующий код в JSFiddle https://jsfiddle.net/mtq5khz0/

  <?php if ($categories) { ?>
  <div id="cssmenu">
    <ul>
      <?php foreach ($categories as $category) { ?>
      <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
          <?php for ($i = 0; $i < count($category['children']);) { ?>
          <ul>
            <?php $j = $i + ceil(count($category['children']) / $category['column']); ?>
            <?php for (; $i < $j; $i++) { ?>
            <?php if (isset($category['children'][$i])) { ?>
            <li><a href="<?php echo $category['children'][$i]['href']; ?>"><?php echo $category['children'][$i]['name']; ?></a></li>
            <?php } ?>
            <?php } ?>
          </ul>
          <?php } ?>
        <?php } ?>
      </li>
    </ul>
  </div>
  <?php } ?>

Весь код заголовка для OpenCart - Измененный код https://jsfiddle.net/v5vmLbjj/

Весь код заголовка для установки по умолчанию OpenCart https://jsfiddle.net/tneqy2qt/

(раскрывающийся код категории (рядом с нижним колонтитулом блока кода)

и вот код меню JQuery, который PHP работает с https://jsfiddle.net/ezhnnbsg/

Ответы

Ответ 1

Если я правильно вас понимаю, есть несколько вещей, которые выделяются мне от просмотра вашего кода.

Во-первых, вы выполняете только цикл $categories и каждый $category['children']. Чтобы добраться до детей второго уровня, вам нужно будет сделать еще один цикл. например:

if(!empty($category['children'][$i]['children'])) {
    echo '<ul>'; 
    foreach($category['children'][$i]['children'] as $children2) {
        echo '<li/>';
    }
    echo '</ul>'; 
}

Вторая проблема, которую я вижу, - это ваш скрипт css.

У вас есть следующее:

#cssmenu ul ul li a { font-size: 12px; font-weight: 400; z-index: 9999; width: 250px; padding: 11px 15px; text-decoration: none; color: #000; border-bottom: 1px solid rgba(150, 150, 150, .15); background: #ddd; webkit-font-size: 11.5px; }

и

#cssmenu .submenu-button { position: absolute; z-index: 99; top: 0; right: 0; display: block; width: 46px; height: 32px; cursor: pointer; border-left: 1px solid rgba(120, 120, 120, .2); }

#cssmenu .submenu-button - это класс, который запускает выпадающее меню, поэтому ему нужен z-индекс выше #cssmenu ul ul li a

Так измените его на это:

#cssmenu ul ul li a { font-size: 12px; font-weight: 400; z-index: 98; width: 250px; padding: 11px 15px; text-decoration: none; color: #000; border-bottom: 1px solid rgba(150, 150, 150, .15); background: #ddd; webkit-font-size: 11.5px; }

Обратите внимание на z-index: 98; вместо z-index: 9999;?

Надеюсь, это поможет решить вашу проблему.

Ответ 2

Ваш внутренний код цикла кажется довольно странным. Следуя коду, похоже, что это сработает, но это возможная ошибка. Поэтому я немного переписал его:

if ($categories) {
    echo '<div id="cssmenu">';
    echo '  <ul>';
    foreach ($categories as $category) {
        echo '    <li><a href="' . $category['href'] .'">' . $category['name'] . '</a>';

        if (count($category['children']) > 0) {
            $columns = array_chunk($category['children'], ceil(count($category['children']) / $category['column']));
            foreach ($columns as $children) {
                echo '      <ul>';
                foreach ($children as $child) {
                    echo '        <li><a href="' . $child['href'] . '">' . $child['name'] . '</a></li>';
                }
                echo '      </ul>';
            }
        }
    }
    echo '    </li>';
    echo '  </ul>';
    echo '</div>';
}

Ответ 3

Вы используете двойные кавычки в одинарных кавычках Попробуйте это

<?php 
     if ($categories) {
          echo "<div id='cssmenu'>";
             echo "  <ul>";
                  foreach ($categories as $category) {
                        echo "    <li><a href='".$category['href']."'>".$category['name']."</a>";

                              if (count($category['children']) > 0) {
                                   $columns = array_chunk($category['children'], ceil(count($category['children']) / $category['column']));
                                   foreach ($columns as $children) {
                                   echo '      <ul>';
                                        foreach ($children as $child) {
                                             echo "        <li><a href='" . $child['href'] ."'>" . $child['name'] . "</a></li>";
                                        }
                                   echo "      </ul>";
                                   }
                              }
                   }
                     echo "    </li>";
             echo "  </ul>";
         echo "</div>";
      }
?>