21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Esop
Profil *
Dobrý den, potřeboval bych radu jak udělat menu u eshopu. Budou tam hlavní kategorie a podkaterie a jejich podkategorie. Prostě to může být strašně rozvětvené. Vím jak to má vypadat, ale netušim jak to provést. Jak uložit data do db? Napadlo mně třeba z nich udělat
něco jako adresářovou strukturu (Neco/podneco/podpodneco) a v takovém formátě to uložit do db, jenže pak by byl problem vypisováním. Takže jestli můžete dát nějakou radu, jak takové rozvětvené menu udělat, budu moct v děčný.

Děkuji předem FB
Smajlix
Profil *
napiš mi na ICQ# 282847458 a já ti to kompletně osvětlim..
Akacko
Profil
Smajlix
Nechtěl bys to napsat i tady? nějak stručně? Protože k tomuto problému se dostává hodně lidí (taky jsem s tím před půlrokem zápasil). Kdoví, možná se taky přiučím.
Alphard
Profil
http://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php
orsic
Profil
Taky by mě zajímalo Smajlixovo řešení ...
Smajlix
Profil *
předkládám své řešení, když by vás to zajímalo:
http://uloz.to/130899/polozky.rar
Smajlix
Profil *
psal jsem to narychlo, kdyby z toho nedko netusil, tak rad vysvetlim, ale nejsem na nejaky popisovy slohy - uz ani neumim poradne cesky psat..
Str4wberry
Profil
Odpovídám Smajlixovi:
Nebylo by lepší, vložit ten kousek kódu sem do fóra?
Akacko
Profil
Škoda že zde není něco jako wiki, kde by se dávali takové věci a návody.
Esop
Profil *
Tak to asi vyřeším, že budu mít tabulku (id, jmeno, jmeno4url, hloubka, rodic), kde v pro hlavní položky bude rodič /// (něco neutrálního, co by nikdo neměl použít pro název kategorie) a subpoložek vždy bude odkazovat na rodiče v jmeno4url. Jmeno4url je ošetřené jméno (bez diakritiky, mezery nahrazené pomlčkou). Takže subpoložka hlavní položky Oblečení (jmeno4url = obleceni, rodic = ///, hloubka = 0) bude Pánské(jmeno4url = panske, rodic = obleceni, hlubka=0). Subpoložkou pro Pánské budu Kalhoty (jmeno4url = kalhoty, rodic = obleceni/panske, hloubka = 2) doufám, že s tímto řešením půjde vše tak jak má.

Proč rodič ve tvaru obleceni/panske a ne nějaká číselná hodnota?
Protože v URL chci předávat data ve tvaru cat=obleceni, can=obleceni/panske ... postupne mozna pride na radu htaccess.

Je to dobré řešení, nebo mne doporučíte jiné???
Esop
Profil *
Edit: ... bude Pánské(jmeno4url = panske, rodic = obleceni, hloubka=1).
Akacko
Profil
Esop
Já osobně bych do rodic ukládal ID položky panske a ne text → rodic = 1.
Esop
Profil *
Akacko
a to proč?
Akacko
Profil
Esop
No třeba proto že je to zbytečné a myslím že bude rychlejší dělat procesy s typem int než varchar. A je ještě takové nepsané pravidlo (dalo by se říct), že se pro relace používá ID položky, ne její název a to z důvodu duplikace. (Stejná položka může byt v databázi vícekrát, ID je však jedinečné).
Esop
Profil *
No to určitě ano, jenže pak je zase komplikovanejší předávat a zpracovávat ty data z URL
smajlix
Profil *
doporucuju hazet to id rodice, text je zase zdrzovani... nicmene, pokud si das k tomu nazvu unique, tak to take muze bez problemu jet (ale podle me je to zbytecne zpomalovani a znasilnovani skriptu)
smajlix
Profil *
jenom mi tam prijde trosku zmatena ta hloubka.. koukals na ten muj kod??
Alphard
Profil
smajlix
tvůj kód vypadá přehledně, ale rekurze nebude nejefektivnějí
Esop píše Prostě to může být strašně rozvětvené. Tohle by mohlo vést až k několika desítkám (snad ne stovkám) dotazů na databázi na každé stánce.

Esop
nevím, jak často se bude to menu měnit a jak rychlé řešení vymyslíš, ale možná by stálo za úvahu cachování
smajlix
Profil *
Alphard
Tak s těmi dotazy máš pravdu. Jak jsem to psal rychle, tak jsem nad tím ani nepřemýšlel. Nicméně, šlo by to po každé změně uložit do nějakého souboru a z něj to tahat..
Alphard
Profil
smajlix
Nicméně, šlo by to po každé změně uložit do nějakého souboru a z něj to tahat..
o příspěvěk výše jsme to již navrhoval, Esop se musí rozhodnout podle konkrétní situace

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0