Přeskočit přímo na text


Jak napsat vlastní modul pro Drupal - díl 1.

Tvůrci webových aplikací, pracující s Drupalem, dřív nebo později pocítí potřebu rozšířit systém o vlastní kód. Drupal nabízí velké možnosti v tomto směru a proto by byla škoda, abychom si o nich něco málo neřekli. Vzhledem k tomu, že materiálů v českém jazyce není mnoho, rozhodl jsem se napsat sérii článků, které by měl být praktickým úvodem do modulové problematiky.

Jelikož nejsem zastánce přílišné teorie na úkor praktických ukázek, půjdeme rovnou na věc. Každý drupalovský modul je uložen v samostatné složce, který určuje jeho název i pro tzv. hook funkce (vysvětlím později). Všechny tyto moduly jsou pak uloženy ve 2 adresářích, z nihž ten první se nalézá v kořenovém adresáři Drupalu a jmenuje se modules. Tento adresář je vyhazen především pro moduly dodávané s Drupalem a nedoporučuje se jej používat pro uživatelské moduly (ale také nezakazuje). Dalším adresářem je sites/all/modules. Do tohoto adresáře budeme ukládát také náš ukázkový modul.

První, co musíme udělat, je vytvořit novou složku ve výše zmíněném adresáři. Náš modul nazveme „testmod“ bez uvozovek. V této složce pak vytvoříme 3 nové soubory (jejich předpona odráží název modulu a musí se s ním vždy shodovat) :
  • testmod.module – Samotný PHP kód našeho modulu
  • testmod.install – Funkce pro instalaci a odinstalaci modulu (může obsahovat například funkce pro vytvoření tabulek v databázi, či jejich výmaz)
  • testmod.info – Informace o modulu

Všechny soubory ukládejte v kódování UTF-8, aby jste předešli případným problémům.

Soubor *.info

Soubor *.info (kde * zastupuje název modulu, v našem případě testmod) obsahuje některé další informace, např.: plný název, popis, verzi modulu nebo skupinu, do které patří. Podívejme se na obsah souboru testmod.info:

; $Id: testmod.info, v 1.0 2007/07/06 20:00:00 djanku Exp $
name = „Testovací modul“
description = „Popis našeho modulu, může být i delší…“
version = „5.x-1.0“
package = Tests modules
project = „testmod“
dependencies =
 

Jak vidíte, není to nic těžkého. Jednotlivé řádky mluví samy za sebe. Některé ale jen přeci okomentuji. Pomocí řádku package můžeme určit, do jaké skupiny náš modul spadá (pakliže vůbec do nějaké). My jsme si ho zařadili do testovacích modulů. Píšeme-li modul, který je závislý na modulu jiném (třeba locale, když potřebujeme více jazyků), můžeme je uvést pod dependecies (jednotlivé názvy se oddělují mezerou). Prázdné řádky, můžete vynechat, stejně tak i řádky u kterých si nejste jistí. Vyžadovány jsou akorát první 3 řádky s hlavičkou (klidně stačí napsat jen „; $Id$“ bez uvozovek), názvem a popisem modulu.

Soubor *.install

Tento soubor není nezbytný, ale může se hodit. Obsahuje funkce, které se vykonají při aktivaci či deaktivaci modulu. To se hodí, když si potřebujete připravit „půdu pod nohama“. Nicméňe, na úklid by se také nemělo zapomínat :)

Obě funkce se řadí k hook funkcím, takže obsahují jako prefix název modulu. Následuje ukázka našeho testmod.install:

<?php

function testmod_install() {
  // Vytvorim tabulku moje_tabulka

  db_query("CREATE TABLE moje_tabulka(id int unsigned primary key auto_increment,
                                      data varchar(255) not null)");
}

function testmod_uninstall() {
  // Vymazu tabulku moje_tabulka

  db_query("DROP TABLE moje_tabulka");
}

?>

Soubor *.module

Soubor *.module, jak už přípona napovídá, obsahuje PHP kód našeho modulu. Doporučuji nastavit webový server tak, aby se jeho obsah připadnému „zvědavci“ nezobrazoval. Pokud váš server provozujete na apachovi, stačí povolit .htaccess, který je součástí Drupalu. S praktickým využitím se blíže seznámíme v následujících článcích, kde se podívámé na možnosti, které nám drupalovské rozhraní nabízí. Zde je jejich letmý výčet:
  • definování položek menu
  • ověřování přístupových práv k definovaným částem modulu
  • možnost reagovat na akce uživatele (přihlášení, odhlášení, založení účtu atp.)
  • vytváření obsahů (jak stránkových, tak blokových)
  • periodické vykonávání kódu cronem
  • práce s odkazy v Drupalu, včetně přepisování adres (aliasy)
  • napojení modulu na vyhledávací systém
  • definice nápovědy
  • a mnoho dalších funkcí…

Shrnutí

Výčtem tří hlavních souborů bych tedy zakončil první díl našeho seriálu. V následujících článcích (kdo ví, kolik jich bude :) se seznámíme s praktickým využitím hook funkcí, které nás budou doprovázet na každém kroku… Doufám, že budou články k užitku a předem děkuji za každé upozornění na nesrovnalost či chybu, která se může sem tam objevit.

Tak tedy nashledanou někdy příště!

About the author

V současnosti studuje na SPŠaU v Opavě. Programuje v čem se jen dá (C/C++, PHP, Perl, assembler) a je znám svou hláškou, že Linux je prostě nejlepší :) Mezi jeho koníčky patří, mimo jiné, četba knih, filosofie a vážná hudba.

 

Domácí úkol

Dobrý začátek. Do budoucna se určitě bude hodit tohle: http://api.drupal.org/…/group/hooks a trochu okomentovaně i tohle: http://drupal.org/node/134724

Osobne preferujem pre

Osobne preferujem pre ulozenie vlastneho modulu adresar sites/defaults/modules alebo lepsie sites/mojweb.sk/modules. Do sites/all/modules davam oficialne moduly, ktore moze vyuzivat aj viac „sites“ beziacich na jednej instalacii Drupalu.

Este by som mozno nezacinal rovno s testmod.install ale rovno s nejakym jednoduchym modulom co nepotrebuje vlastnu tabulku. Ale to je v podstate vec pristupu.

Inak dobra praca len tak dalej.

A este ukazka toho modulu bez .info a .install http://drupal.org/node/84658 :)

Super počin

Super počin, přesně tohle jsem potřeboval. Drupal je dobrý systém, ale občas člověk potřebuje doplnit vlastní funkčnost. Netrpělivě budu čekat na další díly tohoto seriálu.

Nádhera

S drupalem jsem začal před několika dny. Tenhle článek je krásně napsanej, dobře vysvětnenej a hrozně mi pomohl.

Poslat nový komentář

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.
  • You can use Texy! to format and alter entered content.
  • Povolené HTML značky: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <p> <br> <b> <i> <h2> <img> <pre> <sup> <sub> <pre class="php"> <span class="php-keyword1"> <span class="php-var"> <span class="php-num"> <img class="screenshot"> <p class="beginner"> <a class="greybox"> <h3> <h4>

Více informací o možnostech formátování

Mollom CAPTCHA (play audio CAPTCHA)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated.

Drupal meet-up mobilni web 2011

Hledat

Přihlášení

Poslední komentáře