Вывод многоуровневого меню с версткой php

282
30 января 2018, 09:00

Не могу вывести выпадающее меню. Необходимо соблюсти верстку, которую не совсем понимаю, как выводить правильно. Вот массив на входе:

array(3) {
[0]=>
array(4) {
  [0]=>
  array(6) {
    ["Subdivision_ID"]=>
    string(1) "4"
    ["Parent_Sub_ID"]=>
    string(1) "0"
    ["Subdivision_Name"]=>
    string(14) "Новости"
    ["Hidden_URL"]=>
    string(9) "/novosti/"
    ["NotContent"]=>
    NULL
    ["ExternalURL"]=>
    NULL
  }
  [1]=>
  array(6) {
    ["Subdivision_ID"]=>
    string(1) "5"
    ["Parent_Sub_ID"]=>
    string(1) "0"
    ["Subdivision_Name"]=>
    string(16) "Учащимся"
    ["Hidden_URL"]=>
    string(14) "/uchaschimsya/"
    ["NotContent"]=>
    NULL
    ["ExternalURL"]=>
    NULL
  }
  [2]=>
  array(6) {
    ["Subdivision_ID"]=>
    string(1) "6"
    ["Parent_Sub_ID"]=>
    string(1) "0"
    ["Subdivision_Name"]=>
    string(18) "Родителям"
    ["Hidden_URL"]=>
    string(12) "/roditelyam/"
    ["NotContent"]=>
    NULL
    ["ExternalURL"]=>
    NULL
  }
  [3]=>
  array(6) {
    ["Subdivision_ID"]=>
    string(1) "7"
    ["Parent_Sub_ID"]=>
    string(1) "0"
    ["Subdivision_Name"]=>
    string(44) "Сведения об организации"
    ["Hidden_URL"]=>
    string(27) "/svedeniya-ob-organizatsii/"
    ["NotContent"]=>
    NULL
    ["ExternalURL"]=>
    NULL
  }
}
[7]=>
array(2) {
  [0]=>
  array(6) {
    ["Subdivision_ID"]=>
    string(1) "8"
    ["Parent_Sub_ID"]=>
    string(1) "7"
    ["Subdivision_Name"]=>
    string(33) "Основные сведения"
    ["Hidden_URL"]=>
    string(46) "/svedeniya-ob-organizatsii/osnovnye-svedeniya/"
    ["NotContent"]=>
    NULL
    ["ExternalURL"]=>
    NULL
  }
  [1]=>
  array(6) {
    ["Subdivision_ID"]=>
    string(1) "9"
    ["Parent_Sub_ID"]=>
    string(1) "7"
    ["Subdivision_Name"]=>
    string(55) "Структура и органы управления"
    ["Hidden_URL"]=>
    string(58) "/svedeniya-ob-organizatsii/struktura-i-organy-upravleniya/"
    ["NotContent"]=>
    NULL
    ["ExternalURL"]=>
    NULL
  }
}
[8]=>
array(2) {
  [0]=>
  array(6) {
    ["Subdivision_ID"]=>
    string(2) "10"
    ["Parent_Sub_ID"]=>
    string(1) "8"
    ["Subdivision_Name"]=>
    string(17) "2 уровень1"
    ["Hidden_URL"]=>
    string(56) "/svedeniya-ob-organizatsii/osnovnye-svedeniya/2-uroven1/"
    ["NotContent"]=>
    NULL
    ["ExternalURL"]=>
    NULL
  }
  [1]=>
  array(6) {
    ["Subdivision_ID"]=>
    string(2) "11"
    ["Parent_Sub_ID"]=>
    string(1) "8"
    ["Subdivision_Name"]=>
    string(18) "2 уровень 2"
    ["Hidden_URL"]=>
    string(57) "/svedeniya-ob-organizatsii/osnovnye-svedeniya/2-uroven-2/"
    ["NotContent"]=>
    NULL
    ["ExternalURL"]=>
    NULL
  }
}

}

Вот функция вывода:

public function outTree($parent_id, $level) 
{   
    $prefFormatter = function($lev) {
        switch ($lev) {
            case 0:
                return "";
                break;
            case 1:
                return "<ul class='sub_menu'>";
                break;
            default:
                return "<ul>";
        }
    };
    $postfFormatter = function($lev) {
        switch ($lev) {
            case 0:
                return "";
                break;
            default:
                return "</li>";
        }
    };
    if (isset ($this->subdivArray[$parent_id])) {
        foreach ($this->subdivArray[$parent_id] as $sub) {
            //echo "<div style='margin-left:" . ($level * 25) . "px;'>" . $sub[Subdivision_Name] . "</div>";
            echo $prefFormatter($level)."<li><a href='#>".$sub[Subdivision_Name]."</a>".$postfFormatter($level);
            //echo htmlspecialchars($prefFormatter($level)."<li><a href='#>".$sub[Subdivision_Name] ." - ". $level."</a>".$postfFormatter($level));
            echo "<br>";
            $level++;
            $this->outTree($sub[Subdivision_ID], $level);
            $level--;
        }
    }
}

Не могу втиснуть правильное форматирование для меню. Оно должно быть вот таким:

<ul class="dropdown">
    <li>
        <a href="#"><i class="fa fa-home" aria-hidden="true"></i></a>
    </li>
    <li>
        <a href="/novosti/">Новости</a></li>
    <li>
        <a href="/uchaschimsya/">Учащимся</a></li>
    <li>
        <a href="/roditelyam/">Родителям</a></li>
    <li>
        <a href="/svedeniya-ob-organizatsii/">Сведения об организации</a>
          <ul class="sub_menu">
              <li>
                <a href="/svedeniya-ob-organizatsii/osnovnye-
                      svedeniya/">Основные сведения</a>
                   <ul>
                       <li><a href="/svedeniya-ob-organizatsii/osnovnye-svedeniya/2-uroven1/">2 уровень1</a></li>
                       <li><a href="/svedeniya-ob-organizatsii/osnovnye-svedeniya/2-uroven-2/">2 уровень 2</a></li>
                   </ul>
              </li>
              <li>
                <a href="/svedeniya-ob-organizatsii/struktura-i-organy-upravleniya/">Структура и органы управления</a>
              </li>
          </ul> 
    </li>

READ ALSO
Как сохранить инфу с формы в txt файл?

Как сохранить инфу с формы в txt файл?

Всем привет! В общем задача такая, что где-то, я криво получаю с формы данные, которые не могу записать в файл

238
Непонятные отступы

Непонятные отступы

Доброго времени сутокПримерно месяц назад начал изучать верстку сайтов, недавно скачал готовый сайт, чтобы попробовать разобраться в коде...

188
Блок с картинкой HTML CSS

Блок с картинкой HTML CSS

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

181
Проверка checkbox

Проверка checkbox

Есть форма с чекбоксом и текстовым полем <input>Изначально текстовое поле скрыто, нужно сделать средством jQuery, появления этого поля при выборе...

245