Autor Zpráva
krteczek
Profil
Dobrý den,
Přemýšlím jak pro můj systém KRS vyřešit kategorie, sekce, (podsekce, podpodsekce...). dříve jsem to řešil natvrdo, prostě:
kategorie > sekce > článek
Jenže toto je svazující, nerozšiřitelné, tak hledám jiný způsob. Napadl mne systém podobný jako je u odsazovaných diskuzí (chůze kolem stromu), ale nejsem si jistý, jestli je to to pravé ořechové, uvažuji, že bych menu nechal generovat vždy po přidání/ubrání článků a uložil ho do souboru.
představuji si to tak, že napíšu/upravím článek a v dalším nechám vygenerovat stromovou strukturu s radiobutony u článků s nižším id než má aktuální článek a tak si bude dotyčný moct vybrat kam chce článek dát.
Je to dobrá myšlenka? Nebo má trhliny? V tom případě mi prosím sdělte kde.
Případně bych rád věděl jak řešíte toto vy.
Díky krteczek
krteczek
Profil
Skusím to podruhé a lépe...
potřebuji jednoduše vyřešit stromovou strukturu článků, jaký systém byste doporučili, nebo jaký systém používáte?
krteczek
RiZe
Profil
No do tabulky článků do db si přidej sloupec pro uchovávání ID sekce. Pak si vytvoř tabulku sekcí, kde bude ID řádku (toto bude v tabulce článků) a pak tam bude jméno sekce a Id podsekce, a pak už používej spojování tabulek atp. a máš podsekce virtuálně :)
mila
Profil
Nejjednodušší řešení je

id | parent_id | content | ...

Vytvoříš tak prakticky neomezenou stromovou strukturu s neomezeným počtem vnoření. Problém je, že databáze neumí (alespoň MySQL) něco jako nekonečný join, takže ti může velmi narůst počet dotazů.

Chůze kolem stromu je fajn, elegantní, přidává ale do databáze jistou redundanci. Další možnost je strukturu nějak cachovat.

Takže pokud není strom nijak velký (nebo nikde ho nevybíráš celý), tak bych se smířil s nějakým dotazem navíc.
Pokud bych použil chůzi kolem stromu, tak naprogramuj nějaký interface, který budeš používat, aby se to najednou nějak nerozpadlo. Ideaální jsou asi fce přímo v databázi.
Pokud se články přidávají jen občas, tak bych vytvořil tabulky, kde budou cachované výsledky jak je potřebuješ pro tvoji aplikaci, a občas bych je vygeneroval znova.
krteczek
Profil
RiZe: toto řešení znám a používal jsem ho u svých projektů kdysi ( http://www.jaknato.com ) , nicméně je hodně svazující, takže mi nevyhovuje...
mila: právě něco na ten způsob chci, aby to bylo nezávislé a snadno rozšiřitelné. problém je v tom, že mi to hlava nechce brát... Pročítám interval ( http://interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-d atabazich/ ) a moudrý z toho zatím nejsem... :-(
mila
Profil
Ten článek jsem četl, je to jasná matfyzáčtina, pokud to pochopíš, není to nic hrozného. Pokud ne, tak těžko radit, ten článek je napsán dobře.

Ten příklad tabulky, co jsem uváděl funguje velmi jednoduše. Ke každému článku uložíš číslo předka. Null pak značí stránku bez předka.
Když vypsat strom, tak rekurzivně voláš jednu fci:

function vypisvetev ($id = null) {
$where = is_null($id)
? "parent_id IS NULL"
: "parent_id = '$id'"; // pokud jde od uzivatele, treba oslashovat
$r = mysql_query ("SELECT id, nazev FROM table WHERE $where");
while ($row = mysql_fetch_assoc($r)) {
echo $row['nazev'];
vypisvetev ($row['id']);
}
}

Pokud chceš třeba drobečkovou navigaci, tak v cyklu vybíráš stránku, která má id jako parent_id

Jak ale vydíš, tak pro vypsání celého stromu voláš dotaz pro každý článek v databázi. Proto je asi dobré výsledek jen nevypsat, ale nějak si ho uložit, a příště ho dostat jedním dotazem...
Toto téma je uzamčeno. Odpověď nelze zaslat.

0