Drupal nejen pro vývojáře - II. díl - háky
Neděle, 15 Listopad 2009 18:16
V minulém dílu jsme si řekli něco o modulech, blocích a stručně jsme probrali i háky (hooks). V těch budeme dnes pokračovat, povíme si o nich podrobněji a ukážeme si jednoduché kousky kódu. Příště si řekneme něco o URL adresách, uživatelích a šablonách, ale nebudeme předbíhat. Jdeme na háky.
Pokud chceme naprogramovat modul, je třeba vytvořit funkce z již předem předdefinovaných funkcí, které nám Drupal nabízí. Tyto háky dovolují systému volat vhodné PHP funkce například při prohlížení stránky, nebo při ukládání informací z databáze. Každý hák má definovaných několik parametrů a návratovou hodnotu. Jméno háčku se vždy skládá z předpony, která udává název modulu daného rozhraní. Například pokud chceme smazat uzel oznámení (annoucement) bude funkce háčku:
announcement_delete(...){....}
Takovýto vytvořený háček vlastního modulu umožňuje mazání informací z databáze. Pro zobrazení uzlu by jsme použili například announcement_view(...) atd. Nyní se podíváme na několik často používaných háčků, které se používají k vytvoření modulů. Uvedené kódy jsou pouze ilustrativní, mají za cíl pouze zobrazit základní možnosti daného typu háku.
Háky přístupu k uzlům
<module_name>_permHáček _perm udává práva přístupu k danému uzlu (permission), která lze na stavit zvlášť pro každého uživatele.
function node_perm() {
return array('administer nodes', 'access content', 'view revisions',
'revert revisions');
}
Modul uzlu rozlišuje mezi administrací uzlů (administer nodes), přístupu k obsahu (acces content), zobrazení revize (view revisions) a vrácení revize (revert revisions). Tyto řetězce jsou využívány k přidělování práv jednotlivým uživatelským typům Výčet práv, které jsou běžně k dispozici vidíme na obrázku 
Můžeme si ovšem vytvořit vlastní. Přidělení práv uživatelům daného řetězce můžeme snadno zjistit pomocí funkce
user_access('obsah k pristupu'), ta nám vrací true, pokud daný uživatel má právo přístupu k danému obsahu. <module_name>_accessAcces háček umožňuje zamezit přístupu k operacím pracujícím s obsahem (prohlížení, mazání, editování,...). Například pokud chceme při akci editace, nebo mazání zjistit, jestli je uživatel autorem daného obsahu, nebo má právo tyto akce právádět napíšeme hák takto:
function <module_name>_access($op, $node) {
if ($op == 'update' || $op == 'delete') {
if ($user->uid == $node->uid or user_access('edit <module_name>')) {
return true;
}
else {
return false;
}
}
}
Háky zobrazení uzlu
<module_name>_form
Umožňuje zobrazení vstupních polí, checkboxů, rozevíracích seznamů apod. O formulářovém API jsme již mluvili v tomto článku:http://www.redakcni-systemy.com/index.php/drupal/clanky/49-pruvodce-formularovym-api-tvorba-a-sablonovani-formularu<module_name>_validate
Validace není nic jiného než kontrola, formulářových polí, zda-li jsou platné (mají správný formát, jsou vyplněny).<module_name>_submit
Umožňuje změnu dat vyplňěných ve formuláři ještě předtím, než budou odeslány do databáze, souboru....<module_name>_view
Tento hák zobrazuje data do HTML podoby
<module_name>_menuJak již název napovídá, jedná se o menu hák, jež vrací seznam položek, které se mají v menu zobrazit, každá položka obsahuje jedinečnou URL adresu. Ukázka kódu je níže:
function <module_name>_menu() {
$items = array();
$items[] = array('path' => '<module_name>',
'title' => t('Module Name'),
'access' => user_access('access content'),
'type' => MENU_SUGGESTED_ITEM,
'callback' => '<module_name>_page');
return $items;
}
Jak vidíme, zde je vložena pouze jedna položka, v klasickém menu by jich bylo samozřejmě více.
<module_name>_nodeapi
Tento hák se využívá při interakci s ostatními moduly na stránce.
Háky uzlu databáze
Podle názvu je jasné, že tyto háky pracují s databází. Při vytváření nového modulu se téměř pravidelně přidává i nová tabulka do databáze tak, aby zobrazované informace byly uloženy v modulu. K ukládání, editování a mazání informací slouží následující háky:<module_name>_load
Vytažení požadovaných informací z databáze.
function <module_name>_load($node) {
$additions = db_fetch_object(db_query('SELECT * FROM {<module_name>} WHERE nid = %s',
$node->nid));
return $additions;
}
Na příkladu vidíme, že jde o klasický MySQL dotaz, návratová hodnota je pole vyhovujících záznamů. Další háky už nebudu popisovat. Jedná se o háky pro úpravu (<module_name>_update),vkládání(<module_name>_insert) a mazání záznamů (<module_name>_delete)
Komentáře (2)
Přidej Váš komentář
Další odkazy
Spřátelené weby
Anketa
Uživatelé na chatu
- No users online

http://drupal.org/project/print
Zaujala mne možnost exportovat články na Vašem webu do pdf.
Rád bych se Vás zeptal, jak jste tento export do pdf implementoval. Stačí mi tip na použitý modul či funkci.
Předem děkuji.