Привет всем.
Задача: вывести меню с подменю, которое соответствует ему(меню).
Таблица 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.
В вашем примере ошибка в поле для 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>
Продвижение своими сайтами как стратегия роста и независимости