| 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: 16 let
|
|||
0