Autor | Zpráva | ||
---|---|---|---|
guru Profil * |
#1 · Zasláno: 31. 5. 2006, 14:44:05
Cau. Prosim, jak se dela menu, ktere ma 2 urovne, ale ta druha se vzdycky zobrazi v zavislosti na prvni. Jako treba kdyz mam polozku, ktera ma dalsi podpolozky, to podmenu se ukaze jenom, kdyz je aktivni jedna z tech stranek, ktere do te kategorie patri. Priklad: 1. uroven = software a polozky 2. uroven = download, FAQ, support....... podmenu se zobrazi jen v pripade, ze je aktivni stranka software, download, FAQ, nebo support. + aby byla polozka, ktera je aktivni vzdycky zabarvena jinak. To jsem zkousel pomoci $_SERVER["SCRIPT_NAME"], ale kdyz tam dam to podmenu, zabarvi se vzdycky jiny odkaz a nefunguje to. Dik.
|
||
finc Profil |
#2 · Zasláno: 31. 5. 2006, 15:28:01
Pokud budu předpokládat, že se jedná o PHP 5 + MySQL 5:
CREATE TABLE table ( id int NOT NULL auto_increment, parent int default NULL, PRIMARY KEY(id), CONSTRAINT fk_rodic_table FOREIGN KEY(parent) REFERENCES table(id) ON UPDATE CASCADE ON DELETE SET NULL )ENGINE=InnoDB; v PHP: class Trida { private $mysqli; public function __construct() { $this->mysqli = new mysqli(/* connect */); } public function zobrazMenu() { $strom = $this->vytvorStrom(); } private function vytvorStrom($rodic = 0) { $query = "SELECT a.id, a.parent, (SELECT COUNT(*) FROM table WHERE parent = a.id) AS podkategorie FROM table AS a WHERE a.parent = ". (!$rodic ? "NULL" : "'. $rodic .'") .""; if ($result = $this->mysqli->query($query) { while($row = $result->fetch_assoc()) { echo implode(" - ", $row) ."<hr>"; if ($row["podkategorie"] > 0) { $this->vytvorStrom($row["id"]); } } $result->close(); } } } // P.S. Psal jsem to z hlavy v téhle textaree, takže neručím za správnost syntaxe :) |
||
guru Profil * |
#3 · Zasláno: 31. 5. 2006, 15:36:28
Takze bez databaze to nepujde? Chystam se ji sice naucit, ale ted na to nemam cas. No ale i presto diky.
|
||
WertriK Profil * |
#4 · Zasláno: 31. 5. 2006, 15:38:04
Software
- download - FAQ - support Vetsinou se to dela pomoci JavaScriptu, v PHP bych to resil asi pomoci pole: $menu = array ( 1 => array ("Software","download","FAQ", "support"), // na prvni pozici je vzdy nazev kategorie 2 => array ("Kategorie","podkategorie1","podkategorie2","podkategorien"), ); Odkazy v menu by potom vypadaly: <a href="id=1&link=nekam.html ">Software</a> - <a href="id=1&link=nekam.html ">download</a> - <a href="id=1&link=nekam.html ">FAQ</a> - <a href="id=1&link=nekam.html ">support</a> <a href="id=2">Kategorie</a> - <a href="id=2&link=nekam.html ">neco1</a> - <a href="id=2&link=nekam.html ">neco2</a> - <a href="id=2&link=nekam.html ">neco3</a> Samotny php kody potom takto : $menu = array ( 1 => array ("Software","download","FAQ", "support"), // na prvni pozici je vzdy nazev kategorie 2 => array ("Kategorie","podkategorie1","podkategorie2","podkategorien"), ); for ($i = 1; $i <= count($menu); $i ++) { echo $menu[$i][1]; // zobrazime nazev kategorie if ($id == $i) { // pokud zvolena kategorie se rovna aktualni tak vypiseme i podkategorie for ($y = 2; $y <= count($menu[$i]), $y++) { // nevim jestli to zbjazne count($menu[$i]), ale melo by :) echo $menu[$i][$y]; // jeste si sem dopl odkazy <a href ... } } } |
||
finc Profil |
#5 · Zasláno: 31. 5. 2006, 15:45:17
No, nevím :)
to WertriK: Je sice pravda, ze to človek může udělat pomocí polí, ale to neřeší to, že pokud budu chtít přidávat nové kategorie, podkategorie, nebo se rozhodnu, že urovní bude víc, tak s tvým skriptem budu namydlenej :) to guru: Samozřejmě, že bez DB jde udělat spoustu věcí, ale PHP bez databáze je jako dům bez dveří a oken :) Všeobecně vztaho, když se naučís základní veci v SQL příkazech, tak ti to v začátcích bude stačit a věř mi, že to není nic moc náročného. pro DB: http://www.linuxsoft.cz/article.php?id_article=731 pro PHP: http://www.linuxsoft.cz/php/ Když se naučíš základy, tak se mrkni na manuál MySQL a PHP. Hlavně to chce psát, psát a psát kód. Jinak hned od začátku se snaž programovat v OOP: http://oop.ronnieweb.net/ |
||
finc Profil |
#6 · Zasláno: 31. 5. 2006, 15:47:44
Jinak to, co jsem sem napsal já (mám na mysli ten kód, tak to není o kopírování a okamžité využití, spíše jde o logiku, kde po strukture tabulek v DB dělám kód, nikoli naopak).
U stromové struktury platí to, že pokud chci vypsat nějakým cyklem stromovou strukturu, tak můžu volit ruzné způsoby. Na stránkách www.interval.cz se o tom také něco dozvíš. Jen si vždycky nech vrátka otevřená pro pozdější úpravy, o kterých jsem psal výše. |
||
Leo Profil |
#7 · Zasláno: 31. 5. 2006, 16:02:36
Neptal se nahodou guru na VZHLED menu, spis nez na to, jak ho ukladat do db? Osobne to resivam takhle:
v CSS #s_kontakty #o_kontakty, #s_nabidka #o_nabidka {.... v HTML <body id="s_kontakty"> <a id="o_kontakty"> <a id="o_nabidka"> <body id="s_nabidka"> <a id="o_kontakty"> <a id="o_nabidka"> Nebo neco podobneho. Leo |
||
finc Profil |
#8 · Zasláno: 31. 5. 2006, 16:21:05
to Leo: To je sice pravda, ale když odesílá příspěvek do kategorie PHP, tak předpokládám, že nechce řešit jen statický návrh toho menu.
Ale jestli někdo programuje tímhle způsobem v PHP, pomocí polí či ručně přidávaného html kodu do php, tak jsem se asi spletl :) |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0