Autor | Zpráva | ||
---|---|---|---|
Flavier Profil * |
#1 · Zasláno: 19. 5. 2010, 19:44:13
Zdravím. Som opäť s logikou v koncoch. Posúďte sami.
Z indexu volám do výpisu $page->RenderSortiment(); Rendder sortiment vyzera nasledovne: kód: function RenderSortiment() { global $app; $sqlQuery = "SELECT S.*, count(S.ID) FROM clSortiment S INNER JOIN Product P ON P.clSortiment=S.ID WHERE S.DateValidTo IS NULL AND P.DateValidTo IS NULL AND S.nadkat = 0 GROUP BY S.ID ORDER BY Value"; $result = $app->Db->Select($sqlQuery); while ($row = mysql_fetch_object($result)) { echo " <li><a href='?p=sortiment&id=$row->ID' title='$row->Value'> " . $row->Value . " »" . "</a></li>\n"; if ($row->ID == $this->id) // generovanie submenu { $this->RenderSortimentSub($row->ID); } } } Tu je to myslim zrozumitelne. RenderSortimentSub som prerobil v ramci logiky- Selectnem kategoriu podla jej ID, pozriem sa na jej nadkategoriu, zapisem ju do pola. To iste spravim s dalsou nadkategoriou az po nultu uroven. Takto naplnene pole dam potom na foreach vypis, kde volam RenderSortimentSub pokial v poli nieco je( moj prepracovany mozog si mysli, ze by tym padom malo vypisat vsetky podkategorie zainteresovanych kategorii:) kód: function RenderSortimentSub($sortimentId) { global $app; $sqlQuery = "SELECT * FROM `clSortiment` WHERE ID = $sortimentId"; $result = $app->Db->Select($sqlQuery); $row = mysql_fetch_object($result); global $poleNadkat; $poleNadkat[] = $row->nadkat;//Pridam ID povodne volanej polozky menu $this->SelectNadkat($row->nadkat); echo "<ol>»"; $sqlQuery = "SELECT * FROM `clSortiment` WHERE nadkat = $sortimentId"; $result = $app->Db->Select($sqlQuery); while ($row = mysql_fetch_object($result)) { echo " <li><a href='?p=sortiment&id=$row->ID' title='$row->Value'> " . $row->Value . " " . "</a></li>\n"; } echo "»</ol>\n"; // foreach ($poleNadkat as &$value) { // Zabespecenie rekurzie funkcie // $this->RenderSortimentSub($value); //} } function SelectNadkat($nadkategoria) //Plnim zasobnik volani funkcie tvorby menu { global $app; $sqlQuery = "SELECT * FROM `clSortiment` WHERE ID = $nadkategoria"; $result = $app->Db->Select($sqlQuery); $row = mysql_fetch_object($result); global $poleNadkat; $poleNadkat[] = $row->nadkat;//Pridam cislo nadkategorie do pola if ($row->nadkat != 0) // overenie konca rekurzie funkcie { $this->SelectNadkat($row->nadkat); } } Dufam ze som tu dal vsetko relevantne. Dajte mi prosim vediet ci na to idem velmi zle alebo len trochu. :) Vdaka |
||
Nox Profil |
#2 · Zasláno: 19. 5. 2010, 19:54:56 · Upravil/a: Nox
Neprocházel jsem to podrobně, ale co mě trklo - dej pokud možno pryč ty globály... pro $app použij třeba dependency injection a pro $poleNadkat...to snad můžeš dát jako parametr
|
||
WertriK Profil |
#3 · Zasláno: 19. 5. 2010, 21:26:11
Flavier:
co to má dělat? |
||
Flavier Profil * |
#4 · Zasláno: 19. 5. 2010, 21:51:40
Vypis kategorii. Po kliknuti na konkretnu kategoriu (lubovolnej urovne) rozbali sa jej podmenu. Ma to byt zabespecene tak jak som uz rozpisal- podla ID kategorie, nacitam do pola $poleNadkat; vsetky nadkategorie danej kategorie a nakoniec volam funkciu pre vypis jednotlivych podkategorii vypisom pola
foreach ($poleNadkat as &$value) { $this->RenderSortimentSub($value); } Zatial je to odkomentovane, lebo mi to nefunguje a patram preco. |
||
WertriK Profil |
#5 · Zasláno: 20. 5. 2010, 10:17:00
Flavier:
Lepší by bylo, kdybys předával ID kategorií celé cesty. Tzn. předal bys id kategorie na první úrovni, na druhé atd. Adresa by mohla vypadat neco.cz/ID-prvni/ID-druha/ nebo neco.cz/?patch[]=ID1&patch[]=2 Tím by jsi měl celou cestu a stačilo by to jednoduše rekurzivní funkcí (jednou) vypsat. Eventuelně by jsi mohl cestu zjistit sám. |
||
Flavier Profil * |
#6 · Zasláno: 20. 5. 2010, 15:21:33
Pomocou tohoto clanku a doplnenim selektu o spominane pole- WHERE nadkat IN ('" . implode("', '", $poleNadkat) . "') som docielil omnoho elegantnejsie riesenie nez ake som tu nacrtol.
Clanok. Odkaz Všetkým zúčastneným vďaka. |
||
Časová prodleva: 14 let
|
0