Články

Odkazy

Spřátelené weby

JoomlaDev.eu - Vše o vývoji CMS Joomla

Redakční systém WordPress - Nejlepší redakční systém zdarma - WordPress

Anketa

O jakém RS by jste chtěli více článků
 
Navigace: Úvodní strana Drupal Články Drupal nejen pro vývojáře - II. díl - háky

Drupal nejen pro vývojáře - II. díl - háky

PDF Tisk Email
Neděle, 15 Listopad 2009 18:16
drupalV 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>_perm
Háč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

permissions

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>_access
Acces 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>_menu

Jak 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)

To by bylo vše.Dnešní článek byl zaměřen spíše na ukázku co všechno háky umí a dokáží. Kompletní dokumentaci si můžete prohlédnout na oficiálních stránkách. Pokud nechcete programovat vlastní moduly, nemusíte se tím příliš zabívat, jde jen o to aby jste měli podvědomí, že něco takového existuje a co je třeba upravit, pokud chceme změnit funkci nějakého již stávajícího modulu.



 

 




 
Komentáře (2)
Export do PDF
2 Neděle, 20 Prosinec 2009 09:28
Administrator
Zdravim, tyto stranky bezi na Joomle, ale Drupal ma take modul staci stahnout zde:

http://drupal.org/project/print
dotaz na export do pdf
1 Sobota, 19 Prosinec 2009 15:45
robert
Prvně díky za pěkné vysvětlení háku!

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.

Přidej Váš komentář

BoldItalicUnderlineStrikethroughSubscriptSuperscriptEmailImageHyperlinkOrdered listUnordered listQuoteCodeHyperlink to the Article by its id
Vaše jméno:
Předmět:
Komentář:

Ochrana osobních údajů, Mapa stránek,design a kód Klasdesign, Redakční systémy, rs@redakcni-systemy.com 2009
Wifi router a antény , Moje IP, Studuj FEL, Barevné kontaktní čočky