Li, ul lista lekérdezéssel

Li, ul lista lekérdezéssel
2005-11-10T20:18:10+01:00
2005-11-17T07:38:32+01:00
2022-07-24T06:37:27+02:00
omelon
Sziasztok! Egy számomra megoldahatatlannak látszó feladatba ütköztem!

A forrás

<ul> <?php $query = "SELECT * FROM content_category"; $eredmeny = mysql_query($query); $talalatok = mysql_num_rows($eredmeny); $menu = array(); while($sor = mysql_fetch_assoc($eredmeny)) { if(!isset($menu[$sor["szint_id"]])) { $menu[$sor["szint_id"]]=array(); } array_push($menu[$sor["szint_id"]],$sor); } function kiir2($menu,$szint_id,$ele_darab,$aktualis) { if(is_array($menu[$szint_id])) { foreach($menu[$szint_id] as $sor) { $_SESSION['menu_szamlalo'] = $_SESSION['menu_szamlalo'] + 1; $ele=""; for($i = 0; $i < $ele_darab; $i++) { $ele.="</ul><li><ul>\n"; } if (empty($szint_id)) { ?> <a href="?pid=#" target="_self" title="<?php echo $sor['name1']; ?>"><?php echo $sor['name1']; ?></a><?php echo $ele; ?> <?php } else // ha almenü { ?> <a href="?pid=#" target="_self" title="<?php echo $sor['name1']; ?>"><?php echo $sor['name1']; ?></a><?php echo $ele; ?> <?php } $menupontok = Array(Array($sor['name1'],$szint_id,$i)); kiir2($menu,$sor["id"],$ele_darab+1,$aktualis); } } } $_SESSION['menu_szamlalo'] = 0; //menupontok kiíratása kiir2($menu,0,0,$aktualis); ?>



<ul>

<li><a href="#">1 menüpont</a></li>

<li><a href="#">2 menüpont</a>

<ul>

<li><a href="#">3 menüpont</a></li>

<li><a href="#">4 menüpont</a></li>

<li><a href="#">5 menüpont</a></li>

</ul>

</li>



<li><a href="#">6 menüpont</a>

<ul>

<li><a href="#">7 menüpont</a>



<ul>

<li><a href="#">8 menüpont</a></li>

<li><a href="#">9 menüpont</a></li>

</ul>



</li>

<li><a href="#">10 menüpont</a>

<ul>

<li><a href="#">11 menüpont</a></li>

<li><a href="#">12 menüpont</a></li>

</ul>

</li>

</ul>

</li>

</ul>


És ezt szeretném kimenetként megcsinálni.

Tehát magyarul minden szint egy uj ulben legyen és minden menüpont li ben!

Megoldaható?

Előre is köszönöm a segítségetek
Mutasd a teljes hozzászólást!
Testre szabva:
<? $result=mysql_query("select id,parent_id,name from menupontok order by parent_id,id"); $menu=array(); while($row=mysql_fetch_assoc($result)) { if(!isset($menu[$row["parent_id"]])) { $menu[$row["parent_id"]]=array(); } array_push($menu[$row["parent_id"]],$row); } function kiir($menu,$parent_id) { if(is_array($menu[$parent_id])) { echo "<ul>"; foreach($menu[$parent_id] as $pont) { echo "<li><a href=\"index.php?id=".$pont["id"]."\">".$pont["name"]."</a>"; kiir($menu,$pont["id"]); echo "</li>"; } echo "</ul>"; } } kiir($menu,0); ?>
Persze az elejére mysql_connect meg ilyesmik.
Mutasd a teljes hozzászólást!

  • sql tábla: CREATE TABLE `menu` ( `id` mediumint(9) NOT NULL auto_increment, `parent` mediumint(9) NOT NULL default '0', `name` varchar(255) collate latin2_hungarian_ci NOT NULL default '', `title` varchar(255) collate latin2_hungarian_ci NOT NULL default '', `link` varchar(255) collate latin2_hungarian_ci NOT NULL default '', `active` enum('Y','N') collate latin2_hungarian_ci NOT NULL default 'Y', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci AUTO_INCREMENT=1; ha a parent 0, akkor menu fejléc, egyébként a parent a szülö id-je....., tehát melyik fejléc alá tartozó pont. kiírás: connect_db(); $eredmeny = mysql_query("SELECT * FROM menu where active='Y'"); while ($sor = mysql_fetch_array($eredmeny)) { if ($sor["parent"]==0) { $menu[$sor["id"]]["parent"]=$sor["name"]; } else { $tmp["id"]=$sor["id"]; $tmp["name"]=$sor["name"]; $tmp["title"]=$sor["title"]; if ($sor["link"]==""){ $tmp["link"]="?module=content&id=".$sor["id"]; } else { $tmp["link"]=$sor["link"]; } $menu[$sor["parent"]][]=$tmp; } } foreach($menu as $csoport => $tetel){ echo "<ul>\n"; echo "<li class=\"title\">".$tetel["parent"]."</li>\n"; unset($tetel["parent"]); foreach($tetel as $item ){ ?> <li><a href="<?=$item["link"];?>" title="<?=$item["title"];?>"><?=$item["name"];?></a></li> <? } echo "</ul>\n"; } mysql_close();

    azzal van még cukrozva, hogyha a link mező ures, akkor az idjét írja ki a html linkbe..

    csak egy szintet tud. asszem.
    Mutasd a teljes hozzászólást!
  • Egyéb ötlet vagy javaslat nincs esetleg?
    Mutasd a teljes hozzászólást!
  • nem jó?
    Mutasd a teljes hozzászólást!
  • Hát köszönöm de ezzel a verzióval az a baj hogy csak egy szintet csinál minden egyes menüpontot egy egy ul és li közé tesz nekem pedig az kellene hgoy minden azonos szinten lévő tegyek azonos ulbe

    Ha tud esetleg még valaki segíteni nagyon megköszönném!!!
    Mutasd a teljes hozzászólást!
  • kipróbáltad?

    csak egy szintet csinál minden egyes menüpontot egy egy ul és li közé tesz
    : ez nem igaz.

    minden azonos szinten lévő tegyek azonos ulbe
    : ezt csinálja.

    két foreach van. a belső teszi az egyes ulekbe a hozzátartozót, a külső meg a ul-eket teszi ki.
    Mutasd a teljes hozzászólást!
  • Szia igen kipróbáltam de sajna mindegyik egy ul és li közé tette

    Tud valaki esetleg még segíteni?

    Előre is köszönöm!!!!
    Mutasd a teljes hozzászólást!
  • jól építetted fel az adatbázist? mert ez nálam müxik, tehát valszeg te vőzél el valamit. Küld el ide, mit tettél be az adatbázisba, és úgy alakítom, jó legyen. a sql dump-ot tedd ide.

    ilyet csinál:


    <ul> <li class="title">cím1</li> <li><a href="?module=content&id=7">menu1</a></li> <li><a href="?module=content&id=8">menu2</a></li> <li><a href="?module=content&id=9">menu3</a></li> <li><a href="?module=content&id=11">menu4</a></li> <li><a href="?module=content&id=12">menu5</a></li> <li><a href="?module=content&id=34">menu6</a></li> </ul> <ul> <li class="title">Cím2</li> <li><a href="?module=content&id=13">menu7</a></li> <li><a href="?module=content&id=14">menu8</a></li> <li><a href="?module=content&id=15">menu9</a></li> <li><a href="?module=content&id=16">menu10</a></li> <li><a href="?module=content&id=36">menu11</a></li> <li><a href="?module=content&id=31">menu12</a></li> <li><a href="?module=content&id=32">menu13</a></li> </ul>

    ez kell?
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    akkor részletesebben írom le mi a panaszom!

    adatbázist tekintve a következő a helyzet

    id = menupont idje

    szint_id = ha főmenü akkor 0 különben szülőidjét tartalmazza

    name1 = a neve amit majd meg kellene jeleníteni.

    és akkor a kinézet:

    egy olyan ciklus kellene ami az összes menüpontot kiíratja ul és li között a szinteknek megfelelően!

    Fontos hogy adott szintmélységű menüpontok mindig azonos ul ben legyenek. Ha egy menünek van almenüpontja akkor az a szülömenüpont lijében kezdődjön!

    Szemléltetés


    <ul> <li><a href="#">Menu1</a></li> <li><a href="#">Menu2</a> <ul> <li><a href="#">Menu2 al</a></li> <li><a href="#">Menu2 al</a></li> <li><a href="#">Menu2 al</a></li> </ul> </li> <li><a href="#">Menu3</a> <ul> <li><a href="#">Menu3 al</a> <ul> <li><a href="#">Menu3 al al</a></li> <li><a href="#">Menu3 al al</a></li> </ul> </li> <li><a href="#">Menu3 al</a> <ul> <li><a href="#">Menu3 al al</a></li> <li><a href="#">Menu3 al al</a></li> </ul> </li> </ul> </li> </ul>

    Remélem valaki tud majd segítni!!! Előre is ezer hála nektek!
    Mutasd a teljes hozzászólást!
  • Kereső...

    Csak testre kell szabnod, hogy mikor írjon nyitó/záró ul/li-t.
    Mutasd a teljes hozzászólást!
  • Ja, most látom, hogy azt próbáltad
    Mutasd a teljes hozzászólást!
  • Testre szabva:
    <? $result=mysql_query("select id,parent_id,name from menupontok order by parent_id,id"); $menu=array(); while($row=mysql_fetch_assoc($result)) { if(!isset($menu[$row["parent_id"]])) { $menu[$row["parent_id"]]=array(); } array_push($menu[$row["parent_id"]],$row); } function kiir($menu,$parent_id) { if(is_array($menu[$parent_id])) { echo "<ul>"; foreach($menu[$parent_id] as $pont) { echo "<li><a href=\"index.php?id=".$pont["id"]."\">".$pont["name"]."</a>"; kiir($menu,$pont["id"]); echo "</li>"; } echo "</ul>"; } } kiir($menu,0); ?>
    Persze az elejére mysql_connect meg ilyesmik.
    Mutasd a teljes hozzászólást!
  • nagyon köszönöm a gyors választ
    Mutasd a teljes hozzászólást!
  • Gyors választ? 6 napja tetted fel a kérdést
    De szívesen
    Mutasd a teljes hozzászólást!
  • jah és még egy
    meg lehet esetleg oldani hogy az első ul id=nav legyen minden más marad csupasz ul és li?
    Mutasd a teljes hozzászólást!
  • function kiir($menu,$parent_id) { static $count=0; $ulid=""; if(is_array($menu[$parent_id])) { if($count==0) { $ulid=" id=\"nav\""; $count=1; } echo "<ul".$ulid.">"; foreach($menu[$parent_id] as $pont) { echo "<li><a href=\"index.php?id=".$pont["id"]."\">".$pont["name"]."</a>"; kiir($menu,$pont["id"]); echo "</li>"; } echo "</ul>"; } }
    Mutasd a teljes hozzászólást!
  • köszben ezt megoldottam :) de helyette felmerült egy másik dolog.

    a li-nek saját class de csak azoknak aminek van további almenüje erre is van esetleg ötleted?

    Ezer hála a sok segítségért!
    Mutasd a teljes hozzászólást!
  • A fgv átstrukturálásával:
    (nem próbáltam, de működnie kéne)
    function kiir($menu,$parent_id) { static $count=0; $ulid=""; if($count==0) { $ulid=" id=\"nav\""; $count=1; } echo "<ul".$ulid.">"; foreach($menu[$parent_id] as $pont) { $vanalmenu=FALSE; $liclass=""; if(is_array($menu[$pont["id"]])) { $vanalmenu=TRUE; $liclass=" class=\"almenusclass\""; } echo "<li".$liclass."><a href=\"index.php?id=".$pont["id"]."\">".$pont["name"]."</a>"; if($vanalmenu==TRUE) { kiir($menu,$pont["id"]); } echo "</li>"; } echo "</ul>"; }
    De ha ezek után még azt is megkérdezed ugyanitt, hogy hogyan lehet megoldani, hogy egy menü almenüi csak a szülőre történő kattintásra íródjanak ki, megverlek
    Mutasd a teljes hozzászólást!
  • nem azzal előbb magam szenvedek és ha nem megy akkor majd nyitok egy topicot

    Ezer köszönet
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd