PHP seriál - Hiearchické (stromové) zobrazování záznamů - díl 1.
Jistě každý z nás co programujeme se již někdy setkal s problémem vypisovaní hierarchických stromových struktur, uložených v relačních databázích jako například MySQL. Postupů zobrazení a editace těchto stromů je nepřeberné množství a na internetu se toho dočtete značně. Napsal jsem vlastní třídu, kterou vám zde v několika dílech postupně celou představím a následně nabídnu ke stažení. Zastávám názor že se nic nemá programovat zbytečně dvakrát a tak se snažím dávat svoje poznatky k dispozici.
Příklad mojí třídy budu interpretovat na příkladu vypisování menu.
Dopředu nikdo neví, kolik bude úrovní.
Třída obsahuje funkce:
- vypsání rozbaleného stromu
- vypsání stromu ve formě menu
- vkládání nových prvků
- přesouvání větví stromu
- mazání prvků stromu
- vypisování nadřazených rodičů oproti aktuální pozici
V rámci třídy se předpokládá již nadefinované připojení k mysql
databázi.
Tak a nyní k tématu. V první část si vytvoříme tabulku a naplníme ji
zkušebními daty.
CREATE TABLE `stromecek` (
`id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`name` varchar( 100 ) CHARACTER SET latin2 default NULL ,
`id_father` smallint( 6 ) NOT NULL default '0',
`parents_list` text CHARACTER SET latin2 NOT NULL ,
`section` int( 11 ) NOT NULL ,
`statestamp` datetime NOT NULL ,
`stateuser` char( 3 ) NOT NULL ,
`state` int( 11 ) NOT NULL ,
PRIMARY KEY ( `id` )
)
Vysvětlení struktury:
- id Automatický klíč
- name Název položky
- id_father Klíč nadřazené položky (vyšší úrovně)
- parents_list Seznam všech nadřazených uzlů až po nejvyšší úroveň
- section Kategorie do které menu patří
- statestamp Datum a čas poslední aktualizace záznamu
- stateuser Kód uživatele která změnu provedl (je to myšleno v rámci celkové administrace)
- state stav záznamu. 1 – aktivní, 4 – smazaný. Záznamy se namažou, fyzicky ale pouze se určuje příznak
nyní vložíme testovací data
INSERT INTO `stromecek` (`name`, `id_father`, `parents_list`, `section`, `statestamp`, `stateuser`, `state`) VALUES
( 'Menu 1', 0, '1', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Menu 2', 3, '3,2', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Menu 3', 0, '3', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Menu 4', 0, '4', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 2-1', 2, '3,2,6', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 2-2', 2, '3,2,7', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 2-3', 2, '3,2,8', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 2-2-1', 7, '3,2,7,9', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 4-1', 4, '4,10', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 4-2', 4, '4,11', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 4-3', 4, '4,12', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 4-3-1', 6, '3,2,6,13', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 4-3-2', 12, '4,12,14', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 4-3-1-1', 13, '3,2,6,13,15', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Menu 2', 0, '18', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 4-2-1', 11, '4,11,19', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Submenu 4-2-1-1', 19, '4,11,19,20', 1, '2008-03-31 16:11:53', '1X', 1),
( 'Menu 5', 0, '25', 1, '2008-03-31 16:11:53', '1X', 1);
V příštím díle začnu postupně zveřejňovat jednotlivé funkce.
««« Předchozí text: PHP seriál - Import dat do databáze pomocí konzole
autor: Honzííík |
Pondělí 31. 03. 2008, 16.09 | tisk | PHP |
0 komentářů | 482x
Komentáře k textu
Rss komentářů tohoto textu - Formulář pro nový komentář
K textu nebyl napsán žádný komentář.
Stručně o mně
Nové komentáře
Online 1 člověkVydané články
PHP seriálALBION Group