Nedávno som robil dynamicky generované menu v mojom redakčnom systéme. Jednoducho sa dajú vložiť, editovať a mazať položky v menu. Z hľadiska použiteľnosti som si povedal, že je nutné užívateľovi dovoliť upravovať aj poradie položiek pri výpise.
Predpokladáme, že už máme vytvorené vkladanie (poprip. upravovanie) a mazanie položiek. Nech už máme štruktúru tabuľky akúkoľvek, doplníme ju o stĺpec s názvom napríklad poradie. Tento stĺpec bude určovať poradie pri výpise, čiže bude typu INT a bude obsahovať hodnoty od 1 až po neurčité číslo (počet záznamov).
Pri vkladaní novej položky si zistíme najvyššiu hodnotu stĺpca poradie, pripočítame mu číslo jedna, čím získame poradie nového záznamu. Následne už len pri vkladaní nového záznamu pridelíme stĺpcu poradie túto hodnotu.
Tak isto ako pri vkladaní, úpravu hodnôt stĺpca poradie musíme upravovať aj pri mazaní položiek. Je to jednoduché. V URL, ktorá vedie na tento script si spolu s id záznamu prenesieme aj jeho aktuálnu hodnotu stĺpca poradie, čím ušetríme jeden dotaz. Potom už len urpavíme hodnotu v ostaných záznamoch tak, aby nám to klapalo.
Nikdy nesmieme zabúdať na bezpečnosť. Funkciou intval() dosiahneme to, že sa nám do dotazu nedostanú žiadne znaky, ktoré tam nechceme, ale iba čísla.
Teraz sa dostaneme k samotnej úprave poradia. Nesmieme zabudnúť, že číslo poradia nemôže byť nulové alebo v zápornej hodnote, ani nemôže mať hodnotu, ktorá je vyššia viac ako o jedno číslo predošlého záznamu. Preto pri výpise zobrazíme prvej položke možnosť presunúť sa iba o úroveň nižšie a poslednej položke možnosť posunúť sa iba o úroveň vyššie. To tu ja nebudem riešiť, lebo každý môže mať odkazy riešene inak. Spoločné musíme mať iba informácie odovzdávane v URL. Potrebujeme id položky, aktuálne poradie a metódu posunutia (vyššie / nižžšie).
To je všetko. Neskôr ak budem mať viac času, možno pridám aj rar s funkčným príkladom.
feroo | fero | 9. apríla 2009 o 00:03:33kokotina chlape
... | emer | 11. apríla 2009 o 16:32:18prečo?
Na tomto blogu su vyjadrené moje myšlienky, názory a postoje k určitým veciam alebo udalostiam. Preto upozorňujem, že to čo tu napíšem nemusí byť 100% pravda a aj ja sa môžem zmýliť, alebo mať odlišný názor na vec. Texty neprešli jazykovou kontrolou.