Autor Zpráva
guru
Profil *
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
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 *
Takze bez databaze to nepujde? Chystam se ji sice naucit, ale ted na to nemam cas. No ale i presto diky.
WertriK
Profil *
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
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
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
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
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 :)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0