Как вывести меню и подменю?

400
01 февраля 2017, 23:56

Привет всем.

Задача: вывести меню с подменю, которое соответствует ему(меню).

Таблица menu

Таблица submenu

Часть Кода с запросами

function get_menu() {
  global $pdo;
  $stmt = $pdo->query('SELECT * FROM menu ');
  $menu = $stmt->fetchAll();
  return $menu;
}
function get_submenu() {
  global $pdo;
  $stmt = $pdo->query('SELECT * FROM sub_menu ');
  $submenu = $stmt->fetchAll();
  return $submenu;
}

HTML

<ul class="side-menu">
  <?php foreach ($menu as $item) : ?>
    <li>
     <span><?php echo $item['name']; ?></span>
      <ul class="sub-menu">
         <?php foreach ($submenu as $submenu_item) : ?>
           <?php if($submenu_item['id_menu'] == $item['id']): ?>
            <li><a href=""><?php echo $submenu_item['name']; ?></a></li>
           <?php endif; ?>
         <?php endforeach; ?>
      </ul>
    </li>
  <?php endforeach; ?>
</ul>

Не могу разобраться как сделать проверку: Если есть подменю у меню, то оставлять тег span перед ul и создавать список(2 строчки, к которым это относится)

<span><?php echo $item['name']; ?></span>
<ul class="sub-menu"></ul> 

Если нет подменю у меню - создавать тег a перед ul, но не создавать список через ul.

Answer 1

В вашем примере ошибка в поле для select. Выбирайте menu_id и name из sub_menu, а не sub_menu.

Можно сделать подзапрос. Самое простое:

// PHP
function get_menu() {
  global $pdo;
  $stmt = $pdo->query('SELECT * FROM menu ');
  $menu = $stmt->fetchAll();
  return $menu;
}
function get_submenu($menuId) {
  global $pdo;
  $stmt = $pdo->prepare('SELECT name FROM sub_menu where menu_id = :menu_id');
  $stmt->bindValue('menu_id', $menuId);
  $stmt->execute();
  $submenu = $stmt->fetchAll();
  return $submenu;
}

<ul class="side-menu"> 
  <?php foreach ($menu as $item) : ?> 
    <li> 
     <span><?php echo $item['name']; ?></span> 
      <ul class="sub-menu"> 
         <?php foreach (get_submenu($item['id']) as $submenu_item) : ?> 
            <li><a href=""><?php echo $submenu_item['name']; ?></a></li> 
         <?php endforeach; ?> 
      </ul> 
    </li> 
  <?php endforeach; ?> 
</ul>

READ ALSO
Как задать конфиг файл в ручную?

Как задать конфиг файл в ручную?

Добрый день! У меня есть два конфиг файла, один для Debug а другой для Release версииКак мне вручную указать путь к конкретному app

358
Работа со вложенными Generic - типами

Работа со вложенными Generic - типами

Доброго времени суток

460
Class Library для локальной базы Microsoft Access

Class Library для локальной базы Microsoft Access

У меня будут два проекта которые будут взаимодействовать(CRUD) с одной локальной базой данных(mdb)Как правильно это реализовать? DataSet, OleDbDataAdapter-ы,...

352
Настройка компилятора c#

Настройка компилятора c#

Здравствуйте, я тут пытаюсь сделать так, что бы после компиляции не создавался файл exe, а выводилось сразу все в консоль(те

467