Kezdőoldal » Számítástechnika » Weblapkészítés » Hogyan tudok MySQL adatbázisbó...

Hogyan tudok MySQL adatbázisból többszintű, lenyíló menüt kiíratni egy php-ba?

Figyelt kérdés

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>



2013. júl. 11. 15:36
 1/7 anonim ***** válasza:

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>

2013. júl. 11. 16:29
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

<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.

2013. júl. 11. 16:43
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
az utolsó KI: </ul> végéről lemaradt egy }
2013. júl. 11. 16:44
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
Köszönöm a tippeket, neki is látok a megoldásnak, remélem sikerül!
2013. júl. 11. 17:45
 5/7 anonim ***** válasza:

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... :)

2013. júl. 11. 17:49
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
...vagy még egyszerűbb, ha már eleve egy JSON tömb-ben tárolod a cuccokat, és akkor még a szervert sem kell ezzel terhelni... ;)
2013. júl. 11. 17:51
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:
Igazán érdekes az iménti felvetés és biztos jó is lenne, de az igazság az, hogy én még csak most kezdek elmélyülni a témában. Sajnos ennyire nem értek egyenlőre hozzá
2013. júl. 11. 18:08

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!