Umr001
@Umr001
php

Как правильно собрать html меню со слегка сложной структурой через циклы php?

Вот цикл, который собирает ХТМЛ, ниже ХТЛМ который должен получится:
$htmlMain = "<ul class='bzz-navbar__cat pull-left'>";
  $htmlItems = '<div class="bzz-navbar__subCat pull-right"><div data-cat="1" class="select"><ul>';
  $index = 0;

  $mainIDs = [];
  while($a = $menu->GetNext()) {
      $index++;

      if($a['DEPTH_LEVEL'] == 1) {
          $htmlMain .= "<li data-cat=".$index." class='select'><span>".$a['NAME']."</span></li>";
          $mainIDs[$a['ID']] = $a['ID'];
      }

      if($a['DEPTH_LEVEL'] == 2) {
          $htmlItems .= "<li><a href=".$a["CODE"]."><figure><img src='/img/temp/bitmap10.png'></figure><div>
                          <p style='color:red'>".$a['NAME']."</p><span>";
      }

      if($a['DEPTH_LEVEL'] == 3) {
          $htmlItems .= "<a href=".$a["CODE"].">".$a['NAME']."</a> &nbsp; ";
      }

  }


  $htmlItems .= "</span></div></a></li></ul><a href=''><img src='/img/temp/bitmap23.png'></a></div></div>";
  $htmlMain .= "</ul>";

Сразу скажу, что смотреть надо на DEPTH_LEVEL==3 именно она строит сабкатегории, и
$htmlItems = '<div class="bzz-navbar__subCat pull-right"><div data-cat="1" class="select"><ul>';
эта строка стоит в неправильном месте. Я просто уже запарился двигать и так и сяк.
А вот такая html должна быть у категорий с ними проблем нет. У каждой категории есть свои саб категории, которые показываются по наведению на категорию
<ul class="bzz-navbar__cat pull-left">
  <li data-cat="1" class="select"><span>Интим</span></li>
  <li data-cat="2"><span>Дилдо</span></li>
  <li data-cat="3"><span>Анальные шарики</span></li>
  <li><a href="">Еще…</a></li>
</ul>


Вот они их хтмл их и не получается правильно построить
<div class="bzz-navbar__subCat pull-right">
<div data-cat="1" class="select">
    <ul>
      <li>
        <a href="">
          <figure><img src="/img/temp/bitmap10.png" alt=""></figure>
          <div>
            <p>Пенисы</p>
            <span>резиновые, ворсовые, 3D </span>
          </div>
        </a>
      </li>
      <li>
        <a href="">
          <figure><img src="/img/temp/bitmap10.png" alt=""></figure>
          <div>
            <p>Контрацепция</p>
          </div>
        </a>
      </li>
    </ul>
  </div>
</div>
<div data-cat="2 class="select">
    <ul>
      <li>
        <a href="">
          <figure><img src="/img/temp/bitmap10.png" alt=""></figure>
          <div>
            <p>Другое</p>
            <span></span>
          </div>
        </a>
      </li>
      <li>
        <a href="">
          <figure><img src="/img/temp/bitmap10.png" alt=""></figure>
          <div>
            <p>Стальные шары</p>
          </div>
        </a>
      </li>
    </ul>
  </div>
</div>
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Если есть возможность изменить структуру массива, то я бы делал как-то так:
function array2Menu($items, $level = 0) {
  $result = '';
  foreach ($items as $item) {
    $class= ""; // впишите свои классы в зависимости от $level
    $result .= "<li class=\"$class\"><a href=\"{$item['code']}\">{$item['name']}</a>"; 
    if (!empty($item['childs'])) {
      $result .= array2Menu($item['childs'], $level + 1);
    }
    $result .= "</li>";
  }
  return "<ul class=\"level$level\">$result</ul>"; // тоже впишите свои классы в зависимости от $level
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы