ugrás a tartalomhoz

Dinamikus menü adatbázisból

Anonymous · 2005. Jan. 28. (P), 18.13
Sziasztok! A kérdésem a következő lenne:

<?php
// $szulo a szülőeleme a gyereknek amit látni szeretnénk
// $szint növekszik, ahogy mélyebbre megyünk a fában
// ezt használjuk hogy szépen beljebb kerüljenek a fa elemi
function displayChildren($szulo, $szint) {
// visszakapjuk a $szulo összes gyerekét
$kapcsolat = mysql_connect( "localhost","root", "" );
mysql_select_db( "test", $kapcsolat );
$result = mysql_query('SELECT felirat FROM tree WHERE szulo="'.$szulo.'";');

// minden gyermeket megjelenítünk
while ($row = mysql_fetch_array($result)) {
// beljebb toljuk és megjelenítjük a gyerek feliratát
echo str_repeat(' ',$szint).$row['felirat']."\n";

// újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit
displayChildren($row['felirat'], $szint+1);
}
}
?>
<pre>
<?
displayChildren('',0);
?>
</pre>

Ez visszaad egy ilyet, hogy:

Programozás
PHP
String
PEAR
MAIL
HTTPCLIENT
HTML
CSS
kiválasztók
XHTML

Ez alapján akarnák egy menüt csinálni, olyat, hogy ennél a példánál maradva a PHP, PEAR,HTML,

CSS-nél megjelenne egy + ikon (olyan mint a windowsban). A menü így mükodik :

<script type="text/javascript">
<!--

d = new dTree('d');

d.add(0,-1,'Fomenu-egyszer kell');
d.add(1,0,'PHP','pelda.html');

d.add(2,1,'String','pelda.html');
d.add(3,1,'Pear','pelda.html');
d.add(4,3,'Mail');
d.add(5,3,'Httpclient','pelda.html');
d.add(6,0,'HTML','pelda.html');
d.add(7,6,'CSS','pelda.html');
d.add(8,7,'kiválasztók','pelda.html');
d.add(9,6,'XHTML','pelda.html');

document.write(d);

//-->
</script>

HOgyan kéne megcsinálni, hogy a fenti séma alapján hozzná létre a menüt?
Sziasztok! A kérdésem a következő lenne:

<?php
// $szulo a szülőeleme a gyereknek amit látni szeretnénk
// $szint növekszik, ahogy mélyebbre megyünk a fában
// ezt használjuk hogy szépen beljebb kerüljenek a fa elemi
function displayChildren($szulo, $szint) {
// visszakapjuk a $szulo összes gyerekét
$kapcsolat = mysql_connect( "localhost","root", "" );
mysql_select_db( "test", $kapcsolat );
$result = mysql_query('SELECT felirat FROM tree WHERE szulo="'.$szulo.'";');

// minden gyermeket megjelenítünk
while ($row = mysql_fetch_array($result)) {
// beljebb toljuk és megjelenítjük a gyerek feliratát
echo str_repeat(' ',$szint).$row['felirat']."\n";

// újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit
displayChildren($row['felirat'], $szint+1);
}
}
?>
<pre>
<?
displayChildren('',0);
?>
</pre>

Ez visszaad egy ilyet, hogy:

Programozás
PHP
String
PEAR
MAIL
HTTPCLIENT
HTML
CSS
kiválasztók
XHTML

Ez alapján akarnák egy menüt csinálni, olyat, hogy ennél a példánál maradva a PHP, PEAR,HTML, CSS-nél megjelenne egy + ikon (olyan mint a windowsban). A menü így mükodik :

<script type="text/javascript">
<!--

d = new dTree('d');

d.add(0,-1,'Fomenu-egyszer kell');
d.add(1,0,'PHP','pelda.html');

d.add(2,1,'String','pelda.html');
d.add(3,1,'Pear','pelda.html');
d.add(4,3,'Mail');
d.add(5,3,'Httpclient','pelda.html');
d.add(6,0,'HTML','pelda.html');
d.add(7,6,'CSS','pelda.html');
d.add(8,7,'kiválasztók','pelda.html');
d.add(9,6,'XHTML','pelda.html');

document.write(d);

//-->
</script>

HOgyan kéne megcsinálni, hogy a e szerint a séma alapján hozzná létre a menüt?


adriankoooo
 
1

Unordered List és dTree

Poetro · 2005. Jan. 28. (P), 18.35
A függvényt mondjuk hogy Unordered list-et kapjunk, a következőképp módosítanám:
  1. <?php  
  2. function displayChildren($szulo$szint) {  
  3.     // visszakapjuk a $szulo összes gyerekét  
  4.     $kapcsolat = mysql_connect( "localhost","root""" );  
  5.     mysql_select_db( "test"$kapcsolat );  
  6.     $result = mysql_query('SELECT felirat FROM tree WHERE szulo="'.$szulo.'";');  
  7.     // vannak gyerek elemek, kirakjuk a kezdő elemet  
  8.     if (mysql_num_rows($result)) {  
  9.         echo('<ul>');  
  10.     }  
  11.     // minden gyermeket megjelenítünk  
  12.     while ($row = mysql_fetch_array($result)) {  
  13.         // beljebb toljuk és megjelenítjük a gyerek feliratát  
  14.         echo('<li>'.$row['felirat']);  
  15.         // újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit  
  16.         displayChildren($row['felirat'], $szint+1);  
  17.         echo('</li>\n');  
  18.     }  
  19.     // voltak gyerek elemek, kirakjuk a záró elemet  
  20.     if (mysql_num_rows($result)) {  
  21.         echo('</ul>\n');  
  22.     }  
  23. }  
  24. ?>  
Ezzel kaptunk egy Unordered listet. de persze más szövegeket is be lehet rakni, ahogy tetszik. Remélem jó lesz kiiundulási pontnak.
De ha már a te példádnál tartotunk, akkor jöjjön a módosítás a hogy te JS függvényedet kapjuk:
  1. <?php  
  2. function displayChildren($szulo$szint$szamlalo=1) {  
  3.     // visszakapjuk a $szulo összes gyerekét  
  4.     $kapcsolat = mysql_connect( "localhost","root""" );  
  5.     mysql_select_db( "test"$kapcsolat );  
  6.     $result = mysql_query('SELECT felirat FROM tree WHERE szulo="'.$szulo.'";');  
  7.     // minden gyermeket megjelenítünk  
  8.     while ($row = mysql_fetch_array($result)) {  
  9.         // kirírjuk a megfelelő hozzáadást  
  10.         echo 'd.add('.$szamlalo.','.$szint.",'".$row['felirat']."','".$row['felirat'].".html');";  
  11.         $szamlalo++;  
  12.         // újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit  
  13.         displayChildren($row['felirat'], $szint+1, $szamlalo+1);  
  14.     }  
  15. }  
  16. ?>  
  17. <script type="text/javascript">  
  18. <!--  
  19. d = new dTree('d');  
  20. d.add(0,-1,'Fomenu-egyszer kell');  
  21. <?php  
  22. displayChildren('',0);  
  23. ?>  
  24. document.write(d);  
  25. //-->  
  26. </script>  
Nem teszteltem, de működnie kellene.
És akkor ugye a JS-edbe beleírja a megfelelő hozzáadásokat. Már ha jól értettem, hogy a dTree objektumod hogy működik.
--------
Poetro
2

Cucc

Anonymous · 2005. Jan. 28. (P), 19.00
Hmm nagyno szépen koszonom a választ, igaz még nem működik: dob egy Stack Owerflowot at line 208-ot, de ez már a script hibája gondolom, megnézem és ha jo lesz értesítelek benneteket hogy m volt a hiba!


adriankoooo
3

meg van

Anonymous · 2005. Jan. 28. (P), 19.07
A gond az volt, hogy:

d.add(0,-1,'Fomenu-egyszer kell');
d.add(0,0,'Programozás','Programozás.html')

E helyett az kell , hogy:

d.add(0,-1,'Fomenu-egyszer kell');
d.add(1,0,'Programozás','Programozás.html').

Mégegyszer nagyon szépen köszönöm!
4

áááá

Anonymous · 2005. Jan. 28. (P), 19.27
áááá sajnos mégsem jó:

ezt generálja:

<script type="text/javascript">
<!--
d = new dTree('d');
d.add(0,-1,'Fomenu-egyszer kell');
d.add(1,0,'Programozás','Programozás.html');
d.add(3,1,'PHP','PHP.html');
d.add(5,2,'String','String.html');
d.add(6,2,'PEAR','PEAR.html');
d.add(8,3,'MAIL','MAIL.html');
d.add(9,3,'HTTPCLIENT','HTTPCLIENT.html');
d.add(4,1,'HTML','HTML.html');
d.add(6,2,'CSS','CSS.html');
d.add(8,3,'kiválasztók','kiválasztók.html');
d.add(7,2,'XHTML','XHTML.html');document.write(d);
//-->
</script>

Ez ezt generálja:

Programozás
PHP
MAIL
HTML

Tehát rossz a számozás...

Meg lehet javítani?
5

recipe

chx · 2005. Jan. 29. (Szo), 00.34
fogod, legyártod a menüdet hogy ul legyen aztán elügetsz a kryogenix.org -ra és szívsz magadba egy kis unobtrusive JS tudást, vannak ott kész menü scriptek, vízszintes, függőleges így nyíló, úgy nyíló, fittyfene.
6

téma

Anonymous · 2005. Jan. 29. (Szo), 11.27
Jó reggelt!

Ahogy javasoltátok , inkább megcsináltam UL-el, de megintcsak elakadtam egy kis hibában:


  1. <?php  
  2. function displayChildren($szulo$szint) {  
  3. // visszakapjuk a $szulo összes gyerekét  
  4. $kapcsolat = mysql_connect( "localhost","root""" );  
  5. mysql_select_db( "test"$kapcsolat );  
  6. $result = mysql_query('SELECT felirat FROM tree WHERE szulo="'.$szulo.'";');  
  7. // vannak gyerek elemek, kirakjuk a kezdő elemet  
  8.  echo('');  
  9. if (mysql_num_rows($result)) {  
  10. echo('<ul>');  
  11. }  
  12. // minden gyermeket megjelenítünk  
  13. while ($row = mysql_fetch_array($result)) {  
  14. // beljebb toljuk és megjelenítjük a gyerek feliratát  
  15. echo('<li url='$row['felirat'] . '>'.$row['felirat']);  
  16. // újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit  
  17. displayChildren($row['felirat'], $szint+1);  
  18. echo('</li>');  
  19. }  
  20. // voltak gyerek elemek, kirakjuk a záró elemet  
  21. if (mysql_num_rows($result)) {  
  22. echo('</ul>');  
  23. }  
  24. }  
  25. ?>  
  26.    
Ez a mostani kód. Ez nagyon jól működik:

  1. <ul><li url=PHP>PHP<ul><li url=String>String</li>...    


Vagyis nem egészen jól, mert nekem olyat kéne generálnia, hogy az első <ul> elem <UL class=mktree id=tree1> legyen, a többi pedig sima <ul>. Már probalgattam sokféleképpen, de nem igazán akart összejönni;

várom válaszotokat:

adriankoooo
7

ul-bol js

Jano · 2005. Jan. 29. (Szo), 14.57
Nagyon jo, hogy CHX azt javasolta, hogy egy eredetileg HTML-ben legeneralt listat alakitas at JS-sel, hiszen igy JS-t letiltott bongeszokben is kezelheto marad az oldal. Nem kis hatrany, hogy a keresok is latjak a linkeket es betudnak menni az aloldalakra, amit js-sel generalt menunel nem tudnanak megtenni.

A kerdesedre a valasz nagyon egyszeru:
A $szint parameter erteket hasznald ahhoz, hogy az elso szinten bele irod a class-t vagy nem irod bele...
8

Működik

Anonymous · 2005. Jan. 29. (Szo), 17.03
Köszönöm, működik!

Ez amúgy egy katalogizáló lesz nekem otthonra, ott még elakadtam, hogy milyen legyen az adatbázis felépítése.

pl.:
/Merevlemez
20GB
40GB
/Nyomtató
Tintasugaras
Lézeres

Itt csináljak minden fő csoportnak (Merevlemez, nyomtató) külön táblát? Vagy ti hogyan oldanátok meg?

adriankoooo
9

máshogy csoportosítsd

VBala · 2005. Jan. 29. (Szo), 22.38
Logikailag csoportosítsd a dolgokat, pl:
fokategoria(id, nev), ebben lesz a merevlemez, nyomtató
alkatresz(id, kategoria_id, nev, leiras..stb), ebben meg a kategoria_id az alkatrész főcsoportjának az id-je, a többi egyértelmű

Vagy ha csak egy táblával csinálod, akkor meg tetszőleges számú alcsoporot is létrehozhatsz:
tabla(id,parent_id,nev,leiras..stb), aztán mondjuk ilyen szabályokat alkalmazol, hogy a parent_id=0, akkor az főkategória, ha a leiras üres, akkor alcsoport, ha minden mező ki van töltve, akkor meg alkatrész