Hogyan tudok MySQL adatbázisból többszintű, lenyíló menüt kiíratni egy php-ba?
HTML-ben megformázott menü így néz ki, ezt szeretném MySQL-en keresztül visszakapni. (css fájlal van formázva a HTML menü)
<ul>
<li><a href="/faq.php">Termékek</a>
<ul>
<li><a href="#">Higiéniai eszközök</a>
<ul>
<li><a href="#">Kézmosó</a></li>
<li><a href="#">Mosogató</a></li>
<li><a href="#">Csoportos kézmosó</a></li>
<li><a href="#">Kézi csizmamosó</a></li>
<li><a href="#">Autómata csizmamosó</a></li>
</ul>
</ul>
PHP részlet így néz ki jelenleg (ezzel a vízszintes menüm főmenüpontjai működnek, csak a lenyíló menü többi része nem)
<?php
require("mysql.php");
//menü megjelenítés
$sql="select menu_id, menu_name,menu_title,menu_ava, menu_level,menu_stat,kat_id from menu_gep where menu_stat='aktiv' and menu_level='1' order by menu_id ASC";
$query=mysql_query($sql);
$menu_gep="";
while($sor= mysql_fetch_assoc($query))
{
$menu_gep .="<div id="menu"><ul><li><a href="?page=".$sor['menu_title']."&besorol=".$sor['kat_id']."">".$sor['menu_name']."</a></li></ul>
</div>\n";
}
//tartalom kiíratás
$id=(isset($_GET['page'])) ? $_GET['page'] : "fooldal";
$sql= "select menu_ava, menu_name, menu_level from menu_gep where menu_title='".$id."'";
$query=mysql_query($sql);
$sor=mysql_fetch_assoc($query);
$ref=$sor['menu_ava'];
?>
MySQL adatbázis részletei
adattábla neve: menu_gep
oszlopai: menu_id; menu_name; menu_title; menu_ava (php lap elérési útvonala); menu_level; menu_stat; kat_id
Így írom ki a menüt és a tartalmat
<body>
<div id="menu">
<?php print $menu_gep?>
</div>
<div id="kapcsolat">
<?php require("$ref");?>
</div>
</body>
Ezt egy weboldalamra készítettem, és onnan másoltam ki, szóval működik. Az adatbázisban lényeges hogy legyen szolu_id mezo, hogy a menüelemek közötti kapcsolat meg legyen teremtve.
<div id="menu">
<div class="left_shadow"></div>
<ul>
<?php
function query($parent_id){
global $kapcsolat;
$query = mysqli_query($kapcsolat, "SELECT id, menu_nev FROM menu WHERE szulo_id=$parent_id AND megjelenit = 1");
return $query;
}
function has_child($query){
$rows = mysqli_num_rows($query);
if ($rows > 0){
return true;
} else{
return false;
}
}
function fetch_menu($query){
while($result = mysqli_fetch_array($query)){
$menu_id = $result['id'];
$menu_name = $result['menu_nev'];
$menu_link = $result['menu_link'];
echo '<li class="menu_list"><h2><a href="index.php?tartalom='.$menu_id.'">'.$menu_name.'</a></h2>';
if (has_child(query($menu_id))){
echo "<ul>";
fetch_menu(query($menu_id));
echo "</ul>";
}
echo "</li>";
}
}
fetch_menu (query(0));
?>
</ul>
<div class="right_shadow"></div>
</div>
<ul>
lekéred a főmenüket
ciklus amíg $sor=mysql_fetch..{
KI: <li>FomenuCim</li>
lekéred az almenüket, aminek szülője ez a főmenü
ha van{
KI: <ul>
Ciklus amíg $sor2=mysql...{
KI: <li>Almenu</li>
}
KI: </ul>
}
</ul>
Ez egy alap, lehet rekurziv függvényt írni rá (vagy keresni), és ennek példájára lehet több szintet beleépíteni.
Szerintem frankóbb lenne Handlebars-zal megcsinálni.
Így készíthetnél egy javascript template-et a lenyíló elemnek... Ennek pedig csak egy JSON tömböt kellene visszadobni PHP oldalról jQuery-s ajax híváson keresztül...
amikor megvan az adatok akkor meg rendereli a template-t és tádám... :) És kicsivel szebb kód mint hegeszteni a php-s kimenetbe a html tag-eket... :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!