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:

<?php
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.'";');
	// vannak gyerek elemek, kirakjuk a kezdő elemet
	if (mysql_num_rows($result)) {
		echo('<ul>');
	}
	// minden gyermeket megjelenítünk
	while ($row = mysql_fetch_array($result)) {
		// beljebb toljuk és megjelenítjük a gyerek feliratát
		echo('<li>'.$row['felirat']);
		// újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit
		displayChildren($row['felirat'], $szint+1);
		echo('</li>\n');
	}
	// voltak gyerek elemek, kirakjuk a záró elemet
	if (mysql_num_rows($result)) {
		echo('</ul>\n');
	}
}
?>
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:

<?php
function displayChildren($szulo, $szint, $szamlalo=1) {
	// 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)) {
		// kirírjuk a megfelelő hozzáadást
		echo 'd.add('.$szamlalo.','.$szint.",'".$row['felirat']."','".$row['felirat'].".html');";
		$szamlalo++;
		// újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit
		displayChildren($row['felirat'], $szint+1, $szamlalo+1);
	}
}
?>
<script type="text/javascript">
<!--
d = new dTree('d');
d.add(0,-1,'Fomenu-egyszer kell');
<?php
displayChildren('',0);
?>
document.write(d);
//-->
</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:



<?php
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.'";');
// vannak gyerek elemek, kirakjuk a kezdő elemet
 echo('');
if (mysql_num_rows($result)) {
echo('<ul>');
}
// minden gyermeket megjelenítünk
while ($row = mysql_fetch_array($result)) {
// beljebb toljuk és megjelenítjük a gyerek feliratát
echo('<li url='. $row['felirat'] . '>'.$row['felirat']);
// újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit
displayChildren($row['felirat'], $szint+1);
echo('</li>');
}
// voltak gyerek elemek, kirakjuk a záró elemet
if (mysql_num_rows($result)) {
echo('</ul>');
}
}
?>
 
Ez a mostani kód. Ez nagyon jól működik:

 <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