Stromové zobrazenie kategórí

8 příspěvků

Archiv diskusního fóra

Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.

  1. Potrebujem pomoct so stromovym zobrazenim kategorii v tabulke categories mam polozky id (id_kategorie) , parent_id (id kategorie na ktoru podkategoria naväzuje) , atd. na konci tohto textu uvediem moj script na zistenie vsetkych podkategorii vybranej kategorie.. napriklad mam strom Kategorie: ovocie -- jablka ---- zrele ---- nezrele -- hrusky zelenina -- mrkva -- cibula chcem napriklad zistitvsetky podkategorie z "ovocie". ja som to robil tak ze v cykle viac krat pouzijem MySQL query. Je to vhodny sposob, alebo existuje nieco jednoduchsie, popripade vhodnejsie? Dakujem moj priklad: $up_level[0]=$_GET[category_open]; //prva kategoria ktora sa ma otvorit while(count($up_level)!=0) { for($k=0;$k<count($up_level);$k++) { $show_categories[]=$up_level[$k]; $query="SELECT id, parent_id FROM ".TABLE_CATEGORIES." WHERE (parent_id='".$up_level[$k]."')"; $res2=MySQL_Query("$query") or die(MySQL_Error()); for($j=0;$j<MySQL_Num_Rows($res2);$j++) { $id=MySQL_Result($res2,$j,'id'); if($id!="")$level[]=$id; } } $up_level=$level; unset($level); } // v poli $show_categories su vsetky podkategorie vratane vybranej
  2. Ano, rekurze je jedna z možností. Já toto řeším jinak. Jelikož mnohem častěji se stromová struktura čte, než upravuje/doplňuje, myslím, si, že je rozumnější to udělat tak, že načteš celý strom, nebo větev na jeden SQL dotaz. Mám takto vyřešenou diskuzi k článkům. Princip: každá položka má svůj jednoznačný identifikátor. Hloubka úrovně je vyjádřena délkou identifikátoru. ovocie 00 -- jablka 0000 ---- zrele 000000 ---- nezrele 000001 -- hrusky 0001 zelenina 01 -- mrkva 0100 -- cibula 0101 Chci-li vypsat vše: SELECT * FROM tad ORDER BY identifikator Chci-li vypsat ovoce: SELECT * FROM tab WHERE substr(identifikator,2,0) = '00' ORDER by identifikator Pokud chci odsazovat úrovně, poznám to podle počtu znaků identifikátorů. Nevýhoda: lze jen omezený počet záznamů v jedné úrovni. Zde od 00 do 99, ale toto lze navýšit zvýšením znaků pro úroveň. Např 000, 000000, 001, 001000, 001001, pak by to bylo 1000 položek. identifikator mám v MySQL typu VARCHAR.
  3. no, jestli jde o menu, tak to už mám nějakou dobu vyřešené. Dělal jsem to tak, že jsou položky v tabulce, která má nějaký název, odkaz na rodičovské menu a pořadí pro "sourozence". Pokud je tento odkaz null, tak je to kořenové menu. Pokud ne, připojí se k nějakému rodičovskému. Načítá se jedním dotazem do db a nastrká se do vícerozměrného pole Je tam pořešené i sbalování a rozbalování a jiné kravinky. Viz http://markovo.wz.cz/class_doc/ (classes - menu) Na požádání osvětlím podrobněji.
  4. Takove menu s rozbalovanim mam na strankach, PHP kod samotneho menu vypada asi takto: initmenu(); strtmnu('Admin'); $odkazphp('pocitadla', 'Počítadla'); $odkazphp('sql_query&query=NOW()&', 'SQL dotaz'); $odkazven('https://mysql.webzdarma.cz/', 'phpMyAdmin'); $odkazphp('navod', 'Návod na správu stránek'); endmnu(); strtmnu('Ladění'); $odkazphp('gestbuk', 'Návštěvní kniha'); $odkazphp('forumaction', 'Forum'); $odkazphp('novinky', 'novinky.php'); endmnu(); strtmnu('Roveři'); $odkazphp('roveri/naseakce', 'Program roverů'); endmnu(); termmenu(); Na pozadani poslu kompletni PHP a CSS zdrojak
  5. Zdarek kolegove. Mohl bych pozadat, jestli byste mi ty zdrojacky neposlali? Email na tomvan@centrum.cz. Ted to zrovna nepotrebuji, ale planuji delat obchudek s vice kategoriemi a rozbalovaci menu by se hodil. Mam sice vlastni algoritmus menu (stejny princip jako MzM), ale ten design by chtelo vyladit. Hlavne, jak je reseno prepinani z plus na minus. Diky.
  6. co je přepínání z plus na mínus? Jinak zrojáky máš na tom class_doc. Viz předchozí příspěvek.
  7. Takova blbuska, kdyz kliknes na to plus (u tebe vedle knihy), aby se ti otevrelo podmenu, tak se ti zmeni na minus a naopak. Je to zalezitost javascriptu. Jen jsem nemel cas najit solidni skript.
  8. no, to moje hypermenu je řešené bez JS a to plus-minus tam je. Ale zase je to samý postback... Možná by stálo za to to zajaxovat. Někde zkusím vystavit příklad.

← Zpět na všechna témata