ObrázokDrupal je Content Management System (CMS) založený na PHP jazyku. To CMS znamená, že je to systém, ktorý viete spustiť na web servery a pomocou rozhrania internetového prehliadača vytvoriť celú stránku (vytvoriť jej obsah – preto ten „content“ v názve). Aspoň tak to bolo kedysi, keď CMS vznikali. Od vtedy už ale ubehlo množstvo času, z Drupalu (ako aj iných CMS) sa stal okrem jeho pôvodného účelu, aj vývojová platforma, na ktorej viete vyvíjať vlastnú, špecifickú funkcionalitu. Na základy písania modulu pre Drupal sa teraz pozrieme bližšie.

Drupal je systém, ktorý už má čo to za sebou. Jeho vývoj sa začal v roku 2001 a získal si pomerne veľkú komunitnú podporu. Inštalácia je triviálna a ovládanie nie je tiež zložité. Toto však nie je článok, ktorý by sa mal zaoberať tým, ako vybudovať stránku z existujúcich modulov. Materiálov na túto tému je na internete dosť. Odovzdávanie týchto informácií preskočím, ale zároveň očakávam, že máte aspoň nejaké základy, pretože budem bez vysvetlenia používať pojmy, ktoré sú pre bežného drupalistu známe.

Hneď na začiatok návodu na vývoj modulu vám dám jednu radu: pozrite sa, či neexistuje modul, ktorý už túto funkcionalitu má. Je to dosť pravdepodobné. V čase písania tohto článku eviduje oficiálna Drupalovská stránka (www.drupal.org) viac ako 19 000 modulov. A to je dosť. Je celkom možné, že niekto pred vami už riešil problém, ktorý sa teraz snažíte vyriešiť vy. Ak by ste aj nenašli modul, ktorý bude presne vyhovovať vaším požiadavkám, tak môžete nájsť niečo, čo mu je podobné a nechať sa inšpirovať. Ďalšia rada: na vyhľadávanie používajte skôr nejaký externý vyhľadávací systém. Ten, ktorý sú je súčasťou Drupal stránky, mi niekedy nenašiel veľa pomerne relevantných odkazov.

Drupal je písaný v PHP, a teda aj váš modul bude pravdepodobne napísaný v tomto jazyku. Pre kód platia väčšinou štandardné pravidlá ako pre iný PHP kód s jedinou výnimkou, a to že na koniec súboru by ste nemali dávať ukončovaciu PHP značku ( ?> ). Ďalšie štandardy písania kódu je možné nájsť tu. Úplne minimálny modul v Drupale musí mať aspoň 2 súbory, a to:

  1. <nazov_modulu>.info
  2. <nazov_modulu>.module

Ten prvý je popisný súbor modulu (so špeciálnou Drupalovskou syntaxou) a ten druhý obsahuje PHP kód modulu (samozrejme takýchto súborov môže byť viac, ale tento jeden je minimum). <nazov_modulu> musí byť jedinečný názov (vzhľadom na existujúce moduly) a musí byť zhodný pre oba súbory. Drupal funguje tak, že kontroluje množinu priečinkov, v ktorých sa môžu nachádzať moduly a hľadá práve tie .info. Ak ich nájde, analyzuje obsah a informácie o module zobrazí v administrátorskom rozhraní. Ako som povedal, priečinkov s modulmi môže byť viac, ale odporúča sa svoje moduly ukladať do sites/all/modules/custom/<nazov_modulu>.

.info súbor obsahuje podstatné informácie pre Drupal, aby vedel, ako má s modulom zaobchádzať. Súbor je vlastne tvorený množinou dvojíc: kľúč – hodnota. Tu sú príklady niektorých kľúčov:

Name – názov modulu

Description – popis modulu

Core – verzia jadra Drupalu potrebného pre modul

Files[] – pole (ten istý kľúč zadáte viackrát na viacerých riadkoch) názov súborov, ktoré tvoria modul (minimálne .info a .modul súbory by mali byť v tomto zozname)

Dependency[] – pole názov modulov, na ktorých je ten váš závislý. Drupal potom nedovolí spustiť váš modul, ak nie sú všetky potrebné závislosti dostupné.

Direktív je viac a toto sú len základné. Je dobré si ich pred začatím písania modulu aspoň zbežne pozrieť.

Takže máte modul, v ňom .info súbor s informáciami, a teraz už ostáva len písať kód. Ale ako? Aby ste toho boli schopní, musíte sa zoznámiť s Drupal API. To sa delí do dvoch veľkých častí. Prvú predstavujú metódy, ktoré viete volať zo svojho kódu a rôzne tak využívať prostredie Drupalu. Tú druhú časť predstavujú metódy, ktoré napíšete vo svojom kóde a ktoré budú volané Drupalom. To znie dosť zvláštne, že? Aby ste pochopili o čo ide, potrebujete sa zoznámiť s Inversion of Control vzorom. Opäť, materiálov je na internete mnoho, a ja sa to pokúsim len zhrnúť:

Je to vzor, pri ktorom riadiaci objekt nepozná presnú implementáciu jednotlivých krokov procesu, len vie, v akom poradí ich volať a to aj robí.

To môže znieť dosť krkolomne na prvý pohľad, ale v podstate to znamená, že Drupal (ako riadiaci systém) len vie, kedy má volať určité metódy v jadre alebo moduloch a rozumie procesu len na určitej úrovni abstrakcie, ale nepozná konkrétne kroky, ktoré sa dejú. V praxi to môže znamenať, že pri dotaze na stránku Drupal skontroluje, či niektoré moduly nemajú metódu, ktorá by v takomto prípade mala byť volaná, a ak áno, zavolá ich.

Takto vyzerá popísaný princíp. Ale čo to znamená pri písaní modulu? Drupal prehľadáva váš modul, snaží sa nájsť metódy, ktoré sú pre neho špecifické, a ktoré potom bude volať v určitých miestach vykonávania. Ako takéto metódy spozná? Podľa názvu. Takáto metóda sa označuje ako hook a jej názov je postavený podľa určite schémy. Napríklad metóda, ktorá dokáže pridať položku do administrátorského menu sa označuje ako hook_menu. To hook sa v názve metódy vždy nahradí za názov vášho modulu. Ak napríklad vyvíjate modul kalkulacka, tak metóda vo vašom module sa bude nazývať kalkulacka_menu. Takáto metóda potom bude automaticky volaná pri vytváraní menu a vy v nej viete ovplyvniť, ako bude výsledné menu vyzerať (hlavne do neho viete pridať položky pre svoj modul). Drupal v podstate predstavuje základný rámec pre fungovanie systému, ktorý má v jednotlivých procesoch (napríklad: generovanie formulára, menu, ukladanie položky do databázy atď.) množstvo bodov, na ktoré sa viete zachytiť a rozšíriť tak jeho funkcionalitu. Ak napríklad chcete, aby sa na každom formulári vašej stránky zobrazovalo nejaké špeciálne políčko, implementujete funkciu volanú pri vytváraní každého formulára, a to políčko tam vložíte.

K hookom sme sa dostali od Drupal API, pretože sú naozaj jeho súčasťou. Na to, aby ste dokázali vytvoriť modul, ktorý bude robiť to, čo potrebujete, musíte aspoň z časti poznať systém hookov. Je ich pomerne dosť (niekoľko stoviek) – pre verziu 7 si môžete pozrieť zoznam tu. Čo je nepochybne zaujímavé je, že každý doinštalovaný modul môže okrem používania existujúcich hookov dodefinovať svoje, a tak ich množinu rozširovať. Zhruba sa dá o Drupal API povedať, že váš kód sa bude nachádzať medzi dvoma vrstvami Drupalu. Tou nad vami, ktorá bude volať vaše hook metódy a tou pod vami, ktorú zase budete volať vy (napríklad metóda, ktorá vám zapíše dáta do databázy). Niekde uprostred medzi týmito vrstvami je váš kód.

Takže viete vytvoriť súbory pre modul, napísať nejaký PHP kód, rozumiete Drupal API. Tak to by bolo asi tak všetko. Vlastne nie. Je to totálne minimum a informácií, ktoré budete musieť vstrebať, bude omnoho viac. Napríklad si budete musieť zvyknúť na prácu s poliami. Drupal využíva polia vo veľkej miere hlavne na definovanie určitých štruktúr. Napríklad na popis formulára. Taký popis je vlastne viacrozmerné pole s presne popísanou štruktúrou a dovolenými hodnotami. Ďalej pre vás bude určite zaujímavé pozrieť sa na proces inštalovania a odinštalovania vášho modulu. To sú práve tie momenty, kedy si modul pripravuje (alebo upratuje po sebe) databázu. V Drupale je na to špeciálny súbor s názvom <nazov_modulu>.install. A v ňom sú dva podstatné hooky: hook_install() a hook_uninstall(). Viete si predstaviť, čo asi robia a ja len dodám, že sú tiež zadefinované pomocou polí. To, čo vás nepochybne skôr alebo neskôr stretne, sú problémy, kedy sa niečo nespráva, ako ste predpokladali. Vtedy je dobre mať na pamäti tri možné kroky, ktoré vám môžu pomôcť:

  1. vymažte cache (je na to tlačidlo, ktoré sa dá nájsť v administrátorskom menu)
  2. skontrolovať práva
  3. v setting.php súbore si zapnúť zobrazovanie chýb (špeciálne to pomáha v prípade, ak všetko, čo dostanete namiesto stránky, je biela plocha)

Stále sme sa ani zďaleka nedostali k všetkým témam. Je ťažké robiť s Drupal, vyhnúť sa pritom šablónam, blokom alebo pohľadom (Views). To všetko sú základné mechanizmy alebo moduly, na ktorých je postavená veľká časť Drupalu. Tento článok predstavuje len úvod písania modulu a na vážnejšie témy je potrebné ďalšie štúdium. Samotný fakt, že existuje množstvo mechanizmov, hotových modulov a oficiálnych postupov ale svedčí o tom, že Drupal je pomerne mocný nástroj, ktorý by vás nemal sklamať, nech už sa so svojou stránkou rozhodnete ísť kamkoľvek.