Matt Butcher, Larry Garfield, John Wilkins, Matt Farina, Ken Rickard, Greg Dunlap. Drupal. Programování modulů



Podobné dokumenty
Jak jednat. se stavebním úřadem. Michal Lalík. e s. stavebnímu zákonu z praxe

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST. Chemické výpočty. Aleš Kajzar Martin Honka

ROZKLIKÁVACÍ ROZPOČET - ONLINE ZVEŘEJŇOVÁNÍ EKONOMICKÝCH DAT ÚŘADU

Daňová partie. Aktuality z oblasti řešení daňových sporů. 5. května Finanční úřady nově jen v krajských městech

Příloha č. 54. Specifikace hromadné aktualizace SMS-KLAS

Spojujeme cesty neziskovek a firem

účetních informací státu při přenosu účetního záznamu,

-1- N á v r h ČÁST PRVNÍ OBECNÁ USTANOVENÍ. 1 Předmět úpravy

Manuál Kentico CMSDesk pro KDU-ČSL

Programs and Updates Desktop. Verze ( ) Insider Preview Uživatelská příručka

Algoritmizace a programování

Windows 7 kompletní příručka. Bohdan Cafourek. Vydala Grada Publishing a.s. U Průhonu 22, Praha 7 jako svou publikaci

Výzva k podání nabídek (zadávací dokumentace)

Cílem kapitoly je seznámit studenta se strukturou programu a jeho překladem.

Využití EduBase ve výuce 10

ICT plán školy 2015/2016

ODPOVĚDI KOMISE NA VÝROČNÍ ZPRÁVU ÚČETNÍHO DVORA ZA ROK 2011 KAPITOLA 6 ZAMĚSTNANOST A SOCIÁLNÍ VĚCI

Testovací aplikace Matematika není věda

ICT plán ZŠ praktické Bochov na rok 2009

Obsah. Úvodem 9 Komu je kniha určena 9 Forma výkladu 9 Konkrétní postup výuky 10 Příklady ke knize 11

Přednáška Tablety a chytré telefony. Ing. Michaela Mudrochová Algoritmus individuálního vzdělávání CZ.1.07/3.1.00/

Provozní řád DTM DMVS Plzeňského kraje

STANDARD 3. JEDNÁNÍ SE ZÁJEMCEM (ŽADATELEM) O SOCIÁLNÍ SLUŽBU

METODICKÝ POKYN NÁRODNÍHO ORGÁNU

Zadávání tiskových zakázek prostřednictvím JDF a Adobe Acrobat Professional

Regenerace zahrady MŠ Neděliště

DODATEČNÉ INFORMACE K ZADÁVACÍM PODMÍNKÁM

Poukázky v obálkách. MOJESODEXO.CZ - Poukázky v obálkách Uživatelská příručka MOJESODEXO.CZ. Uživatelská příručka. Strana 1 / 1. Verze aplikace: 1.4.

Podmínky užití webového rozhraní

Katalog vzdělávání 2015

Seznamka. Adéla Hrubá Zš Bří Jandusů 8.A Prosinec 2015

VZDĚLÁVÁNÍ A OSOBNOST KNIHOVNÍKA

Úřad vlády České republiky Odbor pro sociální začleňování (Agentura)

Masarykova univerzita Právnická fakulta

Pokyn D Sdělení Ministerstva financí k rozsahu dokumentace způsobu tvorby cen mezi spojenými osobami

Základní příručka pro učitele

Obsah. Obsah. Úvod Makra v Excelu Nahrávání maker První setkání s editorem jazyka Visual Basic... 31

UŽIVATELSKÁ PŘÍRUČKA REGISTR CHMELNIC NA EAGRI ZÁKLADNÍ POPIS FUNKCÍ A FORMULÁŘŮ. CCV, s. r. o.

Bezdrátové připojení (pouze u vybraných modelů) Uživatelská příručka

Popis úlohy. Číslo. cs24601

Úvod do problematiky dlouhodobé ochrany digitálních dokumentů - díl 4.

veřejná zakázka na stavební prace s názvem: Sdružená kanalizační přípojka - Město Lázně Bělohrad

Pokusné ověřování Hodina pohybu navíc. Často kladené otázky

Územní plánování, charakter intravilánu a osídlení obce Nosislav

M. Balíková, R. Záhořík, NK ČR 1

Obsah ÚVOD. Participanti. Nastavení testu. - úvod - participanti - nastavení testu - přehled úkolů testu - soupis problémů a návrh řešení - závěr

URBACT Věstník Listopad 2010 #10

ČÁST PÁTÁ POZEMKY V KATASTRU NEMOVITOSTÍ

Orientační průvodce mateřstvím a rodičovstvím v zadávacích dokumentacích poskytovatele

Sociální podnikání a obce: jak na to

Praktické úlohy- zaměření specializace

Česká školní inspekce Pardubický inspektorát INSPEKČNÍ ZPRÁVA. Čj. ČŠIE-1186/11-E

funkční na dual-sim telefonech možnost přesměrovat příchozí hovory možnost nastavení více telefonních čísel pro případ, že je jedno nedostupné

GENDEROVĚ PŘÁTELSKÝ ÚŘAD SLANÝ PODKLAD K E-LEARNINGOVÉMU KURZU

1. kolo soutěže probíhá: od :00:00 hod do :59:59 hod

Záloha a obnovení Uživatelská příručka

Data v počítači EIS MIS TPS. Informační systémy 2. Spojení: jan.skrbek@tul.cz tel.: Konzultace: úterý

29 Evidence smluv. Popis modulu. Záložka Evidence smluv

OBEC HORNÍ MĚSTO Spisový řád

KNIHOVNY A ZÁKON O SBÍRKÁCH

Z Á P I S. z veřejného projednání návrhu koncepce

V Černošicích dne Výzva k podání nabídky na veřejnou zakázku malého rozsahu s názvem: Nákup a pokládka koberců OŽÚ.

městské části Praha 3 pro rok 2016 připravila

Manuál uživatele čipové karty s certifikátem

Služby Knihovny AV ČR v oblasti zveřejnění vědeckých publikací (nejen) pro ústavy AV ČR

Metodické pokyny Obsah

Marketing. Modul 5 Marketingový plán

Marketing. Modul 7 Internetový marketing

INFORMAČNÍ SYSTÉM O AREÁLU

Dne obdržel zadavatel tyto dotazy týkající se zadávací dokumentace:

KOMISE EVROPSKÝCH SPOLEČENSTVÍ

Výzva k podání cenové nabídky

Mikromarz. CharGraph. Programovatelný výpočtový měřič fyzikálních veličin. Panel Version. Stručná charakteristika:

VŠEOBECNÉ OBCHODNÍ PODMÍNKY E-SHOP (Doplňující podmínky k Všeobecným smluvním podmínkám užívání služeb Národního geoportálu INSPIRE)

Pokyny k instalaci FRIATRACE Verze 5.3

Zabezpečení Uživatelská příručka

DODATEČNÉ INFORMACE Č. 4 K ZADÁVACÍM PODMÍNKÁM VEŘEJNÉ ZAKÁZKY

Česká školní inspekce Středočeský inspektorát INSPEKČNÍ ZPRÁVA. Č. j. ČŠIS-2460/10-S. Želivského 805, Kolín IV

Ovoce do škol Příručka pro žadatele

Informace o naší organizaci

Společná deklarace o práci na dálku vypracovaná evropskými sociálními partnery v pojišťovnictví

Příloha č. 1 - Popis realizace sociální služby

Česká školní inspekce Středočeský inspektorát INSPEKČNÍ ZPRÁVA. Čj.: ČŠIS-128/11-S. Mateřská škola Červený Újezd, okres Praha-západ

Databázové a informační systémy

SEMINÁRNÍ PRÁCE KNIHOVNA NÁRODNÍHO TECHNICKÉHO MUZEA. Tomáš Teigiser, Tomáš Jelínek

Aplikace počítačů v provozu vozidel 9

VÝZVA K PODÁNÍ NABÍDKY

Úvodní slovo Vážení přátelé, Seniorský dům Písek a.s. předkládá svou první výroční zprávu od zahájení provozu hlavní činnostidomova

WEBDISPEČINK NA MOBILNÍCH ZAŘÍZENÍCH PŘÍRUČKA PRO WD MOBILE

PHP Best Practices. Please try to fit your code to 80 columns. That's decimal 80. A. Morton

Česká republika Ministerstvo práce a sociálních věcí Na Poříčním právu 1, Praha 2. vyzývá

Sbírka zákonů ČR Předpis č. 473/2012 Sb.

Inovace výuky prostřednictvím šablon pro SŠ

Uživatelská příručka Rejstřík státních zaměstnanců

které je třeba si položit před zakoupením levného CAD programu

Operace nad celými tabulkami

Kreativní malování. s dětmi. Dana Cejpková

Miroslav Kunt. Srovnávací přehled terminologie archivních standardů ISAD(G), ISAAR(CPF) a české archivní legislativy

Registr UJO. Příručka pro uživatele. Institut biostatistiky a analýz. Lékařské a Přírodovědecké fakulty Masarykovy univerzity.

PRAVIDLA PRO POSKYTNUTÍ FINANČNÍHO PŘÍSPĚVKU Z ROZPOČTU STATUTÁRNÍHO MĚSTA LIBEREC PRO POSKYTOVATELE SLUŽEB V SOCIÁLNÍ OBLASTI

Transkript:

Matt Butcher, Larry Garfield, John Wilkins, Matt Farina, Ken Rickard, Greg Dunlap Drupal Programování modulů Computer Press, a. s. Brno 2011

Drupal Programování modulů Matt Butcher, Larry Garfield, John Wilkins, Matt Farina, Ken Rickard, Greg Dunlap Computer Press, a. s., 2011. Vydání první. Překlad: Ondřej Baše Jazyková korektura: Veronika Ukropová Sazba: René Kašík Rejstřík: Tereza Dusíková Obálka: Martin Sodomka Komentář na zadní straně obálky: Martin Domes Technická spolupráce: Jiří Matoušek, Zuzana Šindlerová, Dagmar Hajdajová Odpovědný redaktor: Martin Domes Technický redaktor: Jiří Matoušek Produkce: Petr Baláš Copyright Packt Publishing 2010. First published in the English language under the title Drupal 7 Module Development Autorizovaný překlad z originálního anglického vydání Drupal 7 Module Development. Originální copyright: Packt Publishing 2010. Překlad: Computer Press, a.s., 2011. Computer Press, a. s., Holandská 3, 639 00 Brno Objednávky knih: http://knihy.cpress.cz distribuce@cpress.cz tel.: 800 555 513 ISBN 978-80-251-3440-5 Prodejní kód: K1911 Vydalo nakladatelství Computer Press, a. s., jako svou 4081. publikaci. Computer Press, a. s. Všechna práva vyhrazena. Žádná část této publikace nesmí být kopírována a rozmnožována za účelem rozšiřování v jakékoli formě či jakýmkoli způsobem bez písemného souhlasu vydavatele.

Obsah Předmluva... 13 O autorech... 15 O odborných korektorech... 19 Úvodem... 21 Co najdete v této knize...21 Komu je tato kniha určena...22 Konvence...23 Zpětná vazba od čtenářů...24 Zdrojové kódy ke knize...24 Errata...24 Kapitola 1 Úvod do vývoje modulů Drupalu... 25 Úvod do Drupalu (pro vývojáře)...26 Technologie pohánějící Drupal...26 Jazyk PHP...27 Databáze a systém MySQL...27 Jazyky HTML, CSS a JavaScript...28 Další technologie...28 Webový server...28 Operační systém...28 Architektura Drupalu...28 Hlavní knihovny Drupalu...30 Háčky Drupalu...30 Hlavní moduly Drupalu...31 Databáze...31

4 Obsah Systém témat vzhledu...32 Hlavní subsystémy Drupalu...33 Témata vzhledu...33 Nabídky...33 Uzly...33 Soubory...34 Uživatelé...34 Komentáře...34 Pole a entity...35 Rozhraní Forms API...35 Instalační profily...35 Framework Simple Test...35 Bloky...36 Ostatní subsystémy...36 Nástroje pro vývoj v Drupalu...36 Správa verzí pomocí systémů Git a CVS...36 Webové stránky popisující rozhraní API a programovací standardy...37 Moduly určené vývojářům...37 Shrnutí...38 Kapitola 2 První modul... 39 Náš cíl modul s blokem...39 Vytvoření nového modulu...40 Názvy modulů...40 Kam náš modul patří?...41 Vytvoření adresáře modulu...42 Soubor.info...43 Tvorba souboru.module...46 Práce s rozhraním Block API...54 Háček hook_block_info()...55 Háček hook_block_view()...56 První modul v akci...58 Psaní automatických testů...59 Vytváření testu...60 Shrnutí...67

Obsah 5 Kapitola 3 Témata vzhledu Drupalu... 69 Řídicí logika vs. prezentační logika...70 Rozlišení dat...72 Jádra témat vzhledu...73 Dva způsoby jak na témata vzhledu...73 Funkce témat vzhledu...73 Soubory šablon...76 Zobrazované elementy...82 Zobrazované vlastnosti...84 Háček hook_element_info()...85 Háček hook_page_alter()...86 Síla funkce theme()...86 Návrhy na háčky témat vzhledu...87 Registr témat vzhledu...89 Výchozí hodnoty proměnných...89 Háček hook_theme()...90 Háček hook_theme_registry_alter()...92 Co ještě zbývá?...93 Shrnutí...93 Kapitola 4 Stylování modulu... 95 Opakované používání implementace výchozího tématu vzhledu...96 Další setkání s bloky Drupalu...97 Stylování bloku Drupalu... 101 Zobrazovaný element a návrh na háček tématu vzhledu... 102 Tvorba funkce pre_render()... 103 Připojování pravidel stylů jazyka CSS k zobrazovaným polím... 105 Jazyky psané zprava doleva... 105 Návod na sestavení implementace výchozího tématu vzhledu... 108 Implementace háčku hook_theme()... 109 Proměnné versus zobrazovaný element... 110 Funkce pro předzpracování... 110 Soubory šablon... 115 Shrnutí... 118

6 Obsah Kapitola 5 Tvorba administračního rozhraní... 119 Modul User Warn... 120 Zahájení prací na našem modulu... 120 Systém nabídek Drupalu... 121 Definování funkce zpětného volání stránky pomocí háčku hook_menu()... 121 Zástupné znaky v cestách nabídek... 124 Rozhraní Form API... 126 Funkce drupal_get_form()... 126 Tvorba funkce zpětného volání formuláře... 127 Správa trvalých dat... 131 Proces odesílání formuláře... 133 Zjednodušený způsob pro systémová nastavení... 135 Zjednodušený způsob pro potvrzovací formuláře... 136 Odesílání e-mailu s pomocí funkcí drupal_mail() a hook_mail()... 137 Volání funkce drupal_mail()... 138 Implementace háčku hook_mail()... 139 Systém tokenů... 141 Co jsou tokeny... 141 Implementace tokenů v našem textu... 142 Shrnutí... 144 Kapitola 6 Práce s obsahem... 145 Proč vytvářet své vlastní entity... 146 Cíl... 146 Svazky... 146 Rozhraní Schema API... 147 Deklarujeme naší entitu... 149 Deklarace entity... 150 Řadič entity... 154 Správa entit... 156 Správa typů uměleckých děl... 157 Přidávání uměleckých děl... 159 Prohlížení uměleckých děl... 169 Editace uměleckého díla... 170

Obsah 7 Mazání uměleckého díla... 171 Shrnutí... 175 Kapitola 7 Vytváření nových polí... 177 Náš cíl: pole s rozměry... 177 Jak funguje rozhraní Field API... 178 Tvorba našeho nového typu pole... 179 Deklarace pole... 179 Definice struktury pole... 180 Rozhodnutí o prázdnosti... 181 Nastavení polí... 182 Validace polí... 182 Vystavování polí rozhraní Form API s pomocí widgetů... 184 Deklarace widgetu... 184 Jednoduché formuláře widgetu... 185 Složité widgety... 187 Používání formátovačů k zobrazování našeho pole... 192 Deklarace formátovače... 192 Formátovače s jedinou hodnotou... 193 Složité formátovače... 194 Správa polí mimo systém Field... 197 Vyhledávání entit a polí... 198 Shrnutí... 202 Kapitola 8 Povolení a zabezpečení modulů... 203 Prosazování oprávnění funkcí user_access()... 204 Ověřování správného uživatelského účtu... 205 Háček hook_permission()... 209 Definujeme oprávnění našeho modulu... 210 Píšeme háček hook_permission()... 211 Deklarace vlastních přístupových funkcí... 212 Reakce na odepření přístupu... 215 Povolování oprávnění programově... 217 Definice rolí programově... 219

8 Obsah Zabezpečení formulářů v Drupalu... 219 Rozhraní Forms API... 220 Zakazování formulářových prvků... 220 Předávání citlivých dat ve formulářích... 221 Provádění kontroly přístupu u formulářů... 223 Bezpečné zpracování funkcí zpětného volání Ajaxu... 224 Používání technologie Ajax ve formulářích... 224 Používání technologie Ajax v dalších kontextech... 225 Shrnutí... 229 Kapitola 9 Přístup k uzlům... 231 Srovnání systému Node Access s funkcí user_access() a jinými kontrolami oprávnění... 232 Jak Drupal přiděluje oprávnění uzlů... 232 Funkce node_access()... 234 Porovnání háčku hook_node_access() s tabulkou node_access... 239 Jak používat háček hook_node_access()... 242 Ukázkový modul řízení přístupu... 242 Druhý modul řízení přístupu... 244 Operace prohlížení a moduly řízení přístupu... 247 Kdy napsat modul přístupu k uzlům... 247 Tabulka node_access a její role... 248 Popis schématu tabulky node_access... 250 Definice přístupových pravidel našeho modulu... 251 Tvorba modulu Role Access... 252 Háček hook_node_access_records()... 253 Háček hook_node_grants()... 255 Úvahy nad zabezpečením... 256 Přestavba tabulky node_access... 258 Úprava chování ostatních modulů... 260 Háček hook_node_grants_alter()... 260 Háček hook_node_access_records_alter()... 264 Testování a ladění našeho modulu... 266 Používání modulu Devel Node Access... 267 Shrnutí... 269

Obsah 9 Kapitola 10 JavaScript v systému Drupal... 271 JavaScript uvnitř Drupalu... 272 Vkládání JavaScriptu... 272 Přidávání souborů jazyka JavaScript a jazyka CSS do souborů.info... 273 Funkce drupal_add_js()... 273 Používání rozhraní Library API... 278 Používání zobrazitelných polí... 280 Změna kódu JavaScriptu... 281 Změna kódu jazyka CSS... 282 Kód JavaScriptu určený pro systém Drupal... 283 Prezentace s možností použití témat vzhledu... 283 Přeložitelné textové řetězce... 284 Chování... 284 Pomocné funkce technologie AJAX... 286 Přidávání technologie AJAX k formulářům... 286 Automatické aplikovaní AJAXu... 288 Ajaxové příkazy... 290 Shrnutí... 292 Kapitola 11 Práce se soubory a obrázky... 293 Moduly Twitpick a Watermark... 294 Soubory v Drupalu... 294 Rozhraní File API... 295 Obaly proudu... 298 Tvorba obalu proudu... 299 Obrázky v Drupalu... 304 Rozhraní Image API... 305 Styly obrázků... 309 Tvorba obrázkových efektů... 311 Vytváření stylů obrázků z modulu... 316 Shrnutí... 318

10 Obsah Kapitola 12 Instalační profily... 319 Představení instalačních profilů... 319 Distribuce Drupalu... 320 Založení distribuce... 320 Standardní a minimální profily... 320 Tvorba adresáře s profily... 320 Moduly a témata vzhledu profilu... 321 Tvorba profilů... 321 Povolování modulů... 322 Systém instalačních úloh... 323 Výběr instalační úlohy nebo použití háčku hook_install()... 324 Anatomie instalační úlohy... 324 Vytváření úlohy... 325 Změna úloh... 329 Konfigurace bloků... 330 Nastavení proměnných... 332 Filtry textu... 332 Umístění zdrojového kódu... 333 Spouštění instalačního nástroje z příkazového řádku... 334 Shrnutí... 336 Příloha A Přístup k databázi... 337 Základní dotazy... 338 Objekty výsledků... 338 Dynamické dotazy... 339 Dotazy INSERT... 341 Dotazy UPDATE... 343 Dotazy DELETE... 343 Dotazy MERGE... 343 Pokročilá témata... 344 Transakce... 344 Sekundární servery... 345 Shrnutí... 346

Obsah 11 Příloha B Bezpečnost... 347 Myslete bezpečně... 347 Filtrování versus escapování... 348 Filtrování... 348 Escapování jazyka HTML... 349 Vložení kódu jazyka SQL... 349 Řízení přístupu k uzlům... 350 Zpracování nezabezpečeného kódu... 350 Neztrácet krok s dobou... 351 Shrnutí... 352 Rejstřík... 353

Předmluva Projekt Drupal vytvořil z vlastní iniciativy Dries Buytaert, který je rovněž vedoucím tohoto projektu a v tehdejší době byl vysokoškolským studentem. Původně vytvořil malé webové stránky s novinkami a nástěnkou, aby mohl zůstat v kontaktu se svými přáteli. Když se pomalu blížil čas jeho promoce, umístil tento malý skript veřejně na web, kde se kolem něj začala shromažďovat malá, avšak aktivní, komunita vývojářů, hackerů, nejrůznějších všeumělů a vynálezců. Ze skriptu pohánějícího tyto webové stránky se v lednu roku 2001 stal projekt s otevřeným zdrojovým kódem nesoucí název Drupal. Projekt Drupal si rychle získal pozornost díky své rozšiřitelnosti a modulární architektuře. Od té doby se projekt Drupal se svou komunitou neuvěřitelně rozrostli. Komunita okolo tohoto projektu se skládá z více než 700 000 lidí z různých končin světa. Systém Drupal dnes pohání přes 1 % webu, a to včetně všeobecně známých stránek whitehouse.gov nebo grammy.com; z českých stránek můžeme jmenovat kupříkladu stránky phpmyadmin.cz. V současné době pracuji v komunitě okolo projektu Drupal jako vedoucí vydání na poslední verzi systému Drupal verzi 7. Spolu s Driesem Buytaertem pomáháme hlavnímu týmu přispěvatelů upřesňovat priority, zajišťujeme konečnou kvalitu záplat a v neposlední řadě ukládáme změny do zdrojových kódů projektu, jakmile nastane správný čas. Verze Drupal 7 představuje opravdu obrovský skok kupředu oproti předchozím verzím. Hlavní tým přispěvatelů velmi pečlivě zkoumal omezení systému Drupal ze všech možných úhlů. Na několika univerzitách se uskutečnilo testování použitelnosti, které odhalilo spoustu dlouhotrvajících problémů s uživatelským rozhraním Drupalu a s jeho použitelností, do nichž se s velkou chutí pustil tým zabývající se použitelností. Vývojáři společnými silami odhalili a analyzovali ohromné množství omezení rozhraní API, která sužovala starší verze. Tým pro zajišťování kvality vyvinul značné úsilí na začlenění automatických testů do vývojového procesu, čímž velmi zlepšil schopnost přepisovat různé části systému do lepší podoby. Návrháři z komunity okolo projektu Drupal vystoupili se svými námitkami vůči nedostatečnému řešení tvorby témat vzhledu, jenž je často nutilo k přechodu na jiné frameworky. Vznikl tedy tým zabývající se přístupností, který vydává záplaty za účelem přizpůsobení systému Drupal pravidlům WCAG, ale rovněž vzdělává členy komunity v oblasti přístupnosti. Drupal 7 je pozoruhodnou verzí z mnoha důvodů, avšak především díky rozmanitosti týmu, který se podílel na jejím vývoji. Výsledkem všech těchto úprav je však to, že ve verzi Drupal 7 zůstalo jen velmi málo věcí, které se oproti předchozím verzím nezměnily. Abstraktní databázová vrstva se kompletně přepsala a nyní se zakládá na knihovně PHP Data Objects (PDO), jež zavádí novou objektově-orientovanou syntaxi dotazů. V systému Drupal 7 se kromě formulářů a určitého obsahu (například uživatelských dat nebo dat uzlů) zakládá celá stránka na zobrazitelných polích, což má fantastický dopad na témata vzhledu. K různým entitám systému můžeme přidávat pole metadat prostřednictvím vestavěného rozhraní API pro pole a entity. Tento úkon vyžadoval dříve dodatečný modul a museli jsme se smí-

14 Předmluva řit se skutečností, že můžeme pouze rozbalovat obsah. Pod kapotou nové verze Drupalu se skrývají další stovky vylepšení. Tato kniha vás detailně provede skrz nejdůležitější, nové a upravené koncepce tak, abyste je mohli začít používat v praxi. Autoři tohoto vydání knihy mají více než jen hluboké znalosti vnitřního chování systému Drupal 7, jelikož ve většině případů doslova psali vše, díky čemuž tyto vnitřní funkce fungují. Larry Garfield je hlavním architektem nové objektově-orientované abstraktní databázové vrstvy ve verzi Drupal 7 a udržuje databázový systém jádra Drupalu. John Wilkins je autorem spousty vylepšení šablonových souborů a funkcí systému témat vzhledu, jež vzešla zejména z jeho tvrdé práce na tématu vzhledu Zen. Ken Rickard dohlížel na řadu vylepšení systému přístupu k uzlům v Drupalu 7 poté, co odhalil několik vnějších omezení ve svých modulech Domain Access a Menu Access. Matt Farina pomáhal se spoustou klíčových vylepšení JavaScriptu, a to včetně zaměnitelnosti jazyků CSS a JavaScript a zlepšení efektivity prezentační části systému. Greg Dunlap mnohokrát objevil prakticky neodhalitelné chyby při práci s dokumentací rozhraní API. Upřímně doufám, že tato kniha najde spoustu horlivých čtenářů, kteří nebudou rozšiřovat systém Drupal 7 jen proto, aby vyhověli svým konkrétním požadavkům, ale rozšíří řady naší aktivní komunity, poskytnou nám své zkušenosti a pomůžou nám vylepšovat systém Drupal. Angela Byron, údržbářka jádra systému Drupal 7 a tajemnice společnosti Drupal Association

O autorech Matt Butcher je webový vývojář a autor několika knih. Napsal dalších pět knih pro nakladatelství Packt, a to včetně titulů Drupal 6 JavaScript and jquery a Learning Drupal 6 Module Development. Matt pracuje jako senior vývojář v oddělení ConsumerSearch.com společnosti New York Times, kde má na starosti vývoj jedněch z největších webových stránek na světě postavených na systému Drupal. Matt je aktivním členem komunity okolo Drupalu a udržuje několik modulů. Rovněž řídí pár projektů s otevřeným kódem včetně projektu QueryPath. Chtěl bych poděkovat Larrymu, Kenovi, Samovi, Mattovi, Gregovi a Johnovi za spolupráci na této knize. Jedná se o skvělou skupinu lidí, s nimiž je radost spolupracovat. Také bych rád poděkoval odborným korektorům této knihy, kteří přispěli k lepší kvalitě této knihy. V neposlední řadě bych chtěl poděkovat Austinu Smithovi, Brianovi Tullymu, Cachi Kruelové, Marcovi McDougallovi, Therese Summa a zbytku týmu ConsumerSearch. com za jejich podporu. Lidé ze společnosti Palantir.net pomohli této knize vstát ze země a jsem vždy vděčný za jejich pomoc. Nakonec Angie, Anna, Claire a Katherine obětovaly několik víkendů a večerů se mnou ve prospěch této knihy. Dlužím jim tudíž největší část svého poděkování. Greg Dunlap je softwarový analytik žijící v Stockholmu, ve Švédsku. V posledních 15 letech pracoval na široké škále projektů, a to včetně desktopových databázových aplikací, informačních kiosků, specializovaných programů pro pinball a výherní automaty a webových stránek, přičemž programoval ve více než deseti programovacích jazycích. Po dobu tří let se výrazně podílel na vývoji systému Drupal a udržuje moduly Deploy a Services; rovněž je častým mluvčím na konferencích o Drupalu. V současné době Greg řídí vývoj programů ve společnosti NodeOne. Několik lidí sehrálo klíčové role při mém vývoji systému Drupal, jelikož mi poskytovali pomoc a povzbuzovali mě, když jsem to nejvíce potřeboval. Největší poděkování si zaslouží Gary Love, Jeff Eaton, Boris Mann, Angie Byronová a Ken Rickard za zpříjemnění mé práce. Zvláště bych chtěl poděkovat Roye Naini za to, že se smířila se ztrátou několika společných večerů a víkendů, zatímco jsem dokončoval své kapitoly. Matt Farina je vývojářem Drupalu od roku 2005. Je zkušeným vývojářem prezentačních částí systémů, analytikem a vedoucím vývoje ve společnosti Palantir.net, v níž pracuje na řadě projektů od webových stránek muzeí po velké interaktivní webové stránky. Přispívá k vývoji jádra systému Drupal a také udržuje několik modulů Drupalu.

16 O autorech Matt napsal svůj první počítačový program, když byl v páté třídě. Od té doby programoval ve více než deseti programovacích jazycích. Matt je držitelem bakalářské titulu v oboru elektroinženýrství z univerzity Michigan State University. Larry Garfield je senior architekt a analytik ve společnosti Palantir.net, což je přední firma pro vývoj Drupalu se sídlem v Chicagu. Larry vytváří webové stránky od svých 16 let, což je mnohem déle, než by si rád připustil. V jazyce PHP pracuje od roku 1999. S Drupalem se seznámil v roce 2005, kdy byla ještě na výsluní zájmu verze Drupal 4.6, a v podstatě už jej neopustil. Kromě toho, že je vedoucím architektem a údržbářem databázového subsystému Drupalu, pochází od něj také řada nápadů vylepšujících samotné jádro systému a taktéž několik modulů. Larry pracoval v minulosti jako vývojář pro operační systém Palm OS a jako novinář zabývající se tématem mobilní elektroniky; mimo jiné byl technickým redaktorem knihy Building Powerful and Robust Websites with Drupal 6 od nakladatelství Packt. Je držitelem bakalářského a magisterského titulu v oblasti počítačových věd z univerzity DePaul University. Kdybych měl poděkovat všem lidem, kteří pomohli spatřit této knize světlo světa, potřeboval bych spoustu stránek; podobně jako seznam přispěvatelů systému Drupal 7 obsahoval okolo 700 lidí, když jsem jej prohlížel naposledy. Raději tedy poděkuji celé komunitě okolo Drupalu za její aktivitu, podporu a vůbec všechny ty úžasné věci, které mi ještě přivozují slzy na krajíčku po více než půl desetiletí. Zvláštní poděkování si zaslouží Dries Buytaert, a to nejen za to, že je vedoucím celého projektu, ale rovněž za to, že sedí poblíž mě v sídle DrupalCon Sunnyvale a povzbuzuje mě v mé šílené myšlence zapojit knihovnu PDO do databázové vrstvy Drupalu. Pochybuju o tom, že tuší, kolik starostí mu přinesu v nejbližších letech. Samozřejmě děkuju také rodičům, kteří mi vštěpovali nejen lásku k učení, ale rovněž jistou úroveň pedantství a tvrdohlavosti, bez nichž bych se nedostal v projektu Drupal tak daleko; nemluvě o této knize. Ken Rickard je senior programátor ve společnosti Palantir.net. Často přispívá k projektu Drupal a udržuje moduly Domain Access, MySite a Menu Node API. Ve společnosti Palantir.net navrhuje a staví obří webové stránky pro různorodé typy zákazníků od vydavatelů magazínu Foreign Affairs, přes pořadatele závodů NASCAR, až po zaměstnance univerzity University of Chicago. Od roku 1998 do roku 2008 pracoval v oboru novinářství, v němž začínal svou kariéru se správou webových stránek a později se stal výzkumníkem a konzultantem ve společnosti Morris DigitalWorks. V této společnosti pomáhal spustit webové stránky blufftontoday.com první zpravodajský server postavený na platformě Drupal. Ken spoluzaložil skupinu Newspapers on Drupal (http:// groups.drupal.org/newspapers-on-drupal) a také často publikuje. V roce 2008 pomohl iniciativě Knight Drupal Initiative v jejích začátcích. Jedná se o otevřený příspěvkový proces založený nadací John L. and James S. Knight Foundation. Je taktéž členem dozorčí rady projektu PBS Engage, což je projekt nadace John L. and James S. Knight Foundation s cílem přinést sociální média do služby Public Broadcasting Service. Před vznikem této knihy byl odborným korektorem knihy Drupal 6 Site Blueprints od Timiho Ogunjobiho (nakladatelství Packt).

O autorech 17 Musím poděkovat všem zaměstnancům společnosti Palantir.net, komunitě okolo projektu Drupal a své milované a trpělivé ženě Amy, bez nichž by nic z tohoto nebylo možné. John Albin Wilkins je webovým vývojářem už velmi dlouhou dobu. V květnu 1993 byl jedním z mála šťastlivců, kteří měli možnost vyzkoušet si první grafický webový prohlížeč prohlížeč Mosaic 1.0. Webovým vývojem se zabývá profesionálně od roku 1994. V roce 2005 konečně zjistil, jak hloupé bylo vytvářet vlastní framework pro webové aplikace a objevil sílu Drupalu; od té doby se už nikdy neohlídl zpět. V komunitě okolo projektu Drupal je známý pod přezdívkou JohnAlbin a patří k 20 nejlepším přispěvatelům. John udržuje téma vzhledu Zen, což je velmi dobře zdokumentované a funkčně bohaté výchozí téma vzhledu s neuvěřitelně flexibilním frameworkem pro kaskádové styly. Napsal také několik pomocných modulů pro prezentační část systému kupříkladu modul Menu Block. John v současnosti pracuje se skvělou skupinou vývojářů, návrhářů a tvůrců témat vzhledu Drupalu ve společnosti Palantir.net. Jeho příležitostné hudební příspěvky, videopříspěvky a podcasty je možné najít na adrese http:// john.albin.net/. Chtěl bych poděkovat celé komunitě okolo projektu Drupal za vynikající podporu, přátelství, rozčilování, naštvání a inspiraci; prostě podobně jako v rodině. Také chci poděkovat své skutečné rodině své ženě Jenny a dvěma dětem, Owenovi a Elle, za to, že mi dodávají sílu do života. Miluji vás všechny.

O odborných korektorech Davy Van Den Bremt vyvíjí webové stránky založené na systému Drupal přibližně čtyři roky. Žije ve městě Ghent v Belgii a pracuje jako senior vývojář v Drupalu u společnosti Krimson. Studoval počítačové vědy na univerzitě University of Ghent, ale vrhl se na web jako návrhář a vývojář na straně klienta. Stal se vývojářem Drupalu na plný úvazek, zatímco pracoval u společnosti VRT vlámské společnosti pro veřejné vysílání. Od té doby vytvořil webové stránky pro většinu hlavních belgických mediálních společností, reklamních agentur a vládních institucí. Stará se o blog na adrese drupalcoder.com, do nějž vkládá poznámky o všech věcech, které během své práce s Drupalem objevil a chce se s nimi podělit s ostatními uživateli. Napsal nějaké záplaty pro Drupal 7 a udržuje několik modulů, mezi které patří například moduly Administration Theme a E-mail Marketing Framework. Dave Myburgh se zabýval počítači ještě před vznikem webu. Studoval na molekulárního biologa, ale záhy zjistil, že jej práce s počítači naplňuje více než práce s bakteriemi. Měl vlastní prodejnu s počítači v Jižní Africe (kde vyrůstal) a živil se prodejem a poskytováním technické podpory. Tou dobou dokonce vytvořil několik statických webových stránek pro své klienty. Jakmile se přestěhoval do Kanady, lapil se do světa Drupalu, když po něm před pár lety jeho kamarád chtěl, aby vytvořil webové stránky pro místní historickou společnost. Potom si opět založil svou vlastní společnost a nyní staví webové stránky výhradně s pomocí Drupalu (už nevytváří nadále žádné statické webové stránky). Ve světě Drupalu je vždy co dělat, proto nyní pečlivě rozděluje svůj čas mezi práci a rodinu. Dohlížel na řadu knih o systému Drupal kupříkladu na knihy Drupal 5 Themes a Drupal 6 Themes. Chtěl bych poděkovat své rodině za to, jak mě a mou práci podporují. Práce z domu má své výhody i nevýhody, ale příležitost vidět vyrůstat svého syna za to určitě stojí. Jojodae Ganesh Sivaji patří do komunity okolo Drupalu přes dva roky. Sivaji je rozhodně aktivním členem; přispívá této komunitě tak, že píše záplaty pro moduly core a contrib. Účastnil se programu Google Summer of Code 2009, na němž pracoval pro společnost Drupal na zdokonalování funkcí kvízového modulu, a to spolu Mattem Butcherem a dalšími vývojáři Drupalu. Projekt se dočkal úspěšného konce pod vedením učitelů Matta Butchera a Shyamaly. Sivaji vytvořil a stará se o několik modulů a témat vzhledu na webových stránkách drupal.org. Uživatelský profil Sivaje na stránkách Drupalu lze najít zde: http://drupal.org/user/328724. V současnosti pracuje jako vedoucí webový vývojář a programátor ve společnosti SG E-ndicus InfoTech Pvt Ltd v Chennai, v Indii. V této společnosti zodpovídá za analýzu požadavků, nacházení a poskytování řešení a tvorbu a údržbu webových stránek (převážně v Drupalu a v Joomle).

20 O odborných korektorech Rád bych poděkoval svému učiteli Mattovi Butcherovi, že mi věnoval čas a neustále mě povzbuzoval v mém zájmu o systém Drupal dokonce i při kontrole této knihy. Rovněž děkuji panu Vikramovi Vijayaragavanovi, paní Shyamale, panu Sri Ramadossovi, skupině ILUGC a celé komunitě okolo projektu Drupal (zejména komunitě z města Chennai) za jejich podporu mého zanícení pro systém Drupal.

Úvodem Drupal je oceněný systém pro správu obsahu (CMS) s otevřeným zdrojovým kódem. Jedná se o modulární systém s elegantní architekturou založenou na háčcích a s vynikajícím zdrojovým kódem. Moduly jsou doplňky systému Drupal, které rozšiřují nebo budují jeho klíčovou funkčnost. V této knize představuje šest profesionálních vývojářů Drupalu nové a mocné nástroje, rozhraní API a strategie pro psaní vlastního kódu pro systém Drupal 7 vývojářům pracujícím v jazyku PHP, a to praktickým způsobem pomocí příkladů. Tyto nástroje nejen usnadňují správu a údržbu webových stránek, ale také je radost s nimi pracovat a lze je neuvěřitelně snadno používat. Co najdete v této knize Kapitola 1, Úvod do vývoje modulů Drupalu, uvádí čtenáře do problematiky Drupalu jakožto webového systému pro správu obsahu. Zabývá se základními aspekty, jako jsou například technologie řídící Drupal a jeho architektonické rozvržení. Krátká ukázka komponent (subsystémů) Drupalu a nástrojů pro jeho vývoj završuje základní obraz tohoto systému. V kapitole 2, První modul, si popíšeme, jak postavit náš první modul v Drupalu. Posléze si řekneme, jak je možné psát vlastní kód pro Drupal prostřednictvím rozhraní Block API. Na konci kapitoly se nachází pár slov o testování zdrojového kódu pomocí automatických testů. V kapitole 3, Témata vzhledu Drupalu, se budeme zabývat vrstvou témat vzhledu v systému Drupal. Začneme popisem způsobů, jak vytvářet témata vzhledu a potom přejdeme k aspektům spojeným se samotnou jejich tvorbou. Tato kapitola popisuje zobrazované elementy a končí seznámením čtenáře s registrem témat vzhledu. V kapitole 4, Stylování modulu, použijeme koncepce z předchozí kapitoly ke změně vzhledu modulů Drupalu. Seznámíme se systémem opětovného používání výchozí implementace tématu vzhledu a naučíme se tvořit implementace témat vzhledu pro situace ze skutečného života. V kapitole 5, Tvorba administračního rozhraní, se budeme zabývat tvorbou kompletního modulu včetně administračního rozhraní. V této kapitole nám přijdou vhod základní koncepce modulů popsané v kapitole 2, První modul. Vytvoříme zde ilustrativní modul Upozorňování uživatelů. Kapitola 6, Práce s obsahem, klade důraz na správu obsahu. Přijdeme v ní do kontaktu s tvorbou entity, s třídou řadiče, spojováním entity s rozhraním Field API a zobrazováním potvrzovacích formulářů. V kapitole 7, Vytváření nových polí, se podíváme na zoubek tvorbě nových polí. Dále si ukážeme, jak používat vhodné widgety, abychom umožnili uživatelům editovat tato pole. Požadovaný způsob zobrazování dat zajistíme tak, že si vysvětlíme význam formátovačů.

22 Úvodem Kapitola 8, Povolení a zabezpečení modulů, se zabývá řízením přístupu a bezpečností. Popíšeme si zde povolení, která umožňují uživatelům získat přístup (nebo zakázat přístup) k určitým funkcím. Rovněž si řekneme, jak spravovat role programově. Kapitola popisuje také jednu z nejdůležitějších oblastí webové bezpečnosti, a to manipulaci s formuláři. V kapitole 9, Přístup k uzlům, se seznámíme s přístupem k uzlům, což je jeden z nejmocnějších nástrojů rozhraní API systému Drupal. Tato kapitola objasňuje mimo jiné, jak rozhraní Node Access API rozhoduje o přístupu k uzlu a jak řídí hlavní operace. V kapitole 10, JavaScript v systému Drupal, si popíšeme nezbytné principy pro práci s JavaScriptem v Drupalu. Díky tomu budeme moct vytvářet mocné funkce typu překryvná vrstva, automatické dokončování, přesouvání atd. Kapitola 11, Práce se soubory a obrázky, pojednává o tom, jak si lze usnadnit správu a údržbu v systému Drupal 7 prostřednictvím rozhraní File API a Image API. Rovněž se seznámíme s různými technikami zpracování obrázků, aby byly výsledky naší práce barevnější a zábavnější. Kapitola 12, Instalační profily, nastiňuje způsob práce s distribucemi a instalačními profily v Drupalu. Tyto nástroje usnadňují vývojářům práci. V příloze A, Přístup k databázi, nahlédneme do nitra databázové vrstvy systému Drupal 7 za účelem tvorby pokročilých dotazů mezi databázemi. Příloha B, Bezpečnost, vyzdvihuje, jak je důležité, aby vývojář myslel na bezpečnost při psaní zdrojového kódu. Zabývá se dvěma způsoby zacházení s potenciálně nezabezpečenými daty jmenovitě s filtrováním a escapováním. Komu je tato kniha určena Ať už jste programátor jazyka PHP, nebo uživatel Drupalu snažící se proniknout do tajemství vývoje tohoto systému, jistě pro vás tato kniha bude skvělým zasvěcením do programování v Drupalu. Pokud už máte nějaké zkušenosti s Drupalem, bude pro vás zajisté také neocenitelnou pomůckou, abyste si rozšířili své znalosti o nové funkce systému Drupal 7. Jestliže jste vývojáři témat vzhledu pokoušející se vylepšit své dovednosti, shledáte tuto knihu vynikajícím úvodem do programování v jazyce PHP v prostředí Drupalu. Tato kniha předpokládá, že ovládáte základy programování v jazycích PHP, HTML a CSS. Zkušenost s programováním v Drupalu není nutná, avšak i pro zkušené vývojáře Drupalu se jedná o skvělý způsob, jak držet krok se systémem Drupal 7.

Konvence 23 Konvence V této knize narazíte na řadu stylů textu, které rozlišují různé typy informací. Následuje několik příkladů těchto stylů a vysvětlení jejich významu. Zdrojový kód se v textu znázorňuje takto: Třetí argument specifikuje, co by měla funkce file_ save_date() provést za předpokladu, že existuje soubor se stejným jménem, jako má soubor, jejž se snažíme uložit. Blok zdrojového kódu vypadá následovně: $contents = ; $handle = fopen( /var/www/htdocs/images/xyzzy.jpg, rb ); while (!feof($handle)) { $contents.= fread($handle, 8192); } fclose($handle); Kniha má upoutat vaší pozornost na konkrétní části bloku zdrojového kódu tak, že zvýrazní příslušné řádky nebo výrazy tučně: $items[ user/%/warn ] = array( title => Upozornění, description => Odeslat uživateli e-mail o nesprávném chování webových stránek., page callback => drupal_get_form, Nové termíny a důležitá slova se zobrazují tučně. Systém, který řeší tento problém, se nazývá systém témat vzhledu. Slova, jež vidíte na obrazovce, v nabídkách a dialogových oknech se objevují v textu takto: Na výše zobrazeném snímku můžete vidět seskupující balík Core v levém horním rohu. Důležité poznámky vypadají takto. Tip Tipy a triky se zobrazují takto. Poznámka Poznámky a informace na okraj vypadají takto.

24 Úvodem Zpětná vazba od čtenářů Nakladatelství a vydavatelství Computer Press, které pro vás tuto knihu přeložilo, stojí o zpětnou vazbu a bude na vaše podněty a dotazy reagovat. Můžete se obrátit na následující adresy: redakce PC literatury Computer Press Spielberk Office Centre Holandská 3 639 00 Brno nebo sefredaktor.pc@cpress.cz Computer Press neposkytuje rady ani jakýkoli servis pro aplikace třetích stran. Pokud budete mít dotaz k programu, obraťte se prosím na jeho tvůrce. Zdrojové kódy ke knize Z adresy http://knihy.cpress.cz/k1911 si po klepnutí na odkaz Soubory ke stažení můžete přímo stáhnout archiv s ukázkovými kódy. Errata Přestože jsme udělali maximum pro to, abychom zajistili přesnost a správnost obsahu, chybám se úplně vyhnout nedá. Pokud v některé z našich knih najdete chybu, ať už chybu v textu nebo v kódu, budeme rádi, pokud nám ji nahlásíte. Ostatní uživatele tak můžete ušetřit frustrace a pomoci nám zlepšit následující vydání této knihy. Veškerá existující errata zobrazíte na adrese http://knihy.cpress.cz/k1911 po klepnutí na odkaz Soubory ke stažení.

KAPITOLA 1 Úvod do vývoje modulů Drupalu Drupal je webový systém pro správu obsahu (CMS) a platforma pro sociální média. Přestože je užitečný takový, jaký je, nezapomíná ani na vývojáře. Cílem této knihy je vysvětlit, jak lze Drupal rozšiřovat různými způsoby a pro spoustu účelů. V této kapitole se seznámíme s terminologií, nástroji a procesy pro vývoj systému Drupal 7. Zatímco následující kapitoly se zaměřují na zdrojový kód, tato kapitola se zabývá koncepcemi. Popíšeme si architekturu Drupalu a vysvětlíme si, jak se můžeme zaháknout do Drupalu na strategických místech, abychom jej naučili provádět nové úlohy. Následují nejdůležitější témata popisovaná v této kapitole: Úvod do vývoje Drupalu. Architektura Drupalu. Uzly, pole, uživatelé a ostatní důležité subsystémy. Nástroje pro vývoj v Drupalu. Na konci této kapitoly budete rozumět architektonickým vlastnostem Drupalu a budete připraveni na psaní zdrojového kódu.

26 Kapitola 1: Úvod do vývoje modulů Drupalu Úvod do Drupalu (pro vývojáře) Systém Drupal 7 standardně vykonává všechny běžné funkce webového systému pro správu obsahu. Návštěvníci si mohou prohlížet publikované informace na webových stránkách, navigovat se pomocí nabídek a prohlížet si jednotlivé stránky spolu s obrázky. Uživatelé smí vytvářet účty a zanechávat komentáře. Administrátoři můžou spravovat konfiguraci webových stránek a řídit úrovně povolení uživatelů. Editoři smí vytvářet obsah, zobrazovat si jeho náhled a posléze jej publikovat, jakmile je připraven. Obsah lze sdružovat do kanálů RSS, z nichž čtenáři můžou sbírat nové články po jejich publikování. S několika vestavěnými tématy vzhledu je možné snadno změnit vzhled webových stránek. Přestože se jedná o fantastické funkce, určitě nesplní požadavky všech uživatelů. Proto lze schopnosti Drupalu jednoduše rozšiřovat moduly, tématy vzhledu a instalačními profily. Podívejte se na oficiální stránky Drupalu, na adrese http://drupal.org/, a najdete zde tisíce modulů nabízejících nové funkce a tisíce témat vzhledu umožňujících přetvořit vzhled webových stránek. Skutečnost, že téměř všechny stránky chování Drupalu lze zachytávat a měnit prostřednictvím modulů a mechanismů témat vzhledu, vede některé vývojáře k tomu, že o Drupalu prohlašují, že je nejen systémem pro správu obsahu (CMS), ale frameworkem pro správu obsahu (CMF) se schopností přizpůsobit se konkrétním potřebám a požadavkům na funkčnost. Ať už se Drupal správně nazývá systém pro správu obsahu, nebo framework pro správu obsahu, nás momentálně příliš nezajímá, ale rozhodně nepohrdneme jeho ohromným prostředkem rozšiřitelností. Chcete používat adresářový server pro autentizaci? Existuje na to modul. Chcete exportovat data do souborů CSV (verze oddělená středníky)? K tomuto účelu lze použít několik modulů (v závislosti na tom, jaká data chcete exportovat). Láká vás podpora propojení se sociálními sítěmi Facebook nebo Twitter; případně chcete přidat tlačítko pro sdílení obsahu na sociálních sítích? Na to vše jsou k dispozici taktéž moduly všechny najdete na adrese http://drupal.org/. Chcete spojit systém Drupal se svým vlastním nástrojem, který jste napsali pro řešení konkrétních požadavků? Přestože na to nemusí existovat žádný modul, s troškou programování si můžete napsat vlastní modul. Tato kniha se ve skutečnosti zaměřuje právě na tento problém. Cílem této knihy je zasvětit vás co nejrychleji do vývoje Drupalu. Jak budeme postupovat touto knihou kapitolu po kapitole, seznámíme se s rozhraními API a nástroji nutnými pro tvorbu vlastních webových stránek v Drupalu, přičemž se nebudeme držet pouze teorie. Každá kapitola obsahuje funkční, prakticky zaměřený ukázkový kód, jehož účelem je demonstrovat tvorbu zdrojového kódu. Budeme se držet konvencí při programování v Drupalu a použijeme návrhové vzory Drupalu, aby vynikl správný způsob psaní zdrojového kódu. Přestože zde jistě nenajdete kód, který přesně vyhoví vašim potřebám, zdrojový kód z této kapitoly může sloužit jako základ pro vaše větší, ještě lepší aplikace. Začněme tedy několika úvodními tématy. Technologie pohánějící Drupal Mnohé knihy stejného druhu začínají kapitolou o instalaci dané platformy. Tato kniha nebude však tento zvyk dodržovat z několika důvodu. Zaprvé systém Drupal je neuvěřitelně dobře zdokumentovaný. Soubor README z archivu obsahuje všechny nezbytné informace. Zadruhé zkušenost

Technologie pohánějící Drupal 27 prokázala, že tyto kapitoly nejsou nutné. Softwaroví vývojáři zcela výjimečně potřebují podrobné návody k instalaci tak jednoduchého systému, jako je Drupal. Začneme však stručným přehledem technologií použitých v Drupalu. Jazyk PHP Drupal je napsaný v programovacím jazyku PHP (http://php.net). Jedná se o multiplatformní webový skriptovací jazyk s širokou podporou. Protože je Drupal v tomto jazyce napsaný, v této knize se zaměříme převážně na vývoj v jazyce PHP. Na začátek bychom si měli vyjasnit jednu důležitou věc od verze Drupal 7, je minimální požadovanou verzí jazyka PHP verze PHP 5.2. Starší verze systému Drupal podporovaly rovněž jazyk PHP 4.x, ale to už nadále neplatí. Styl programování v jazyce PHP, který používá Drupal, si také zaslouží zmínku. Ačkoliv spousta aplikací PHP používá objektově orientované programování, Drupal se tímto trendem neřídí. Z řady důvodů, ať už historických, či praktických, používá Drupal převážně procedurální programování. Drupal se příliš nespoléhá na třídy a rozhraní, ale jeho moduly se z velké části skládají z kolekcí funkcí. Než začnete činit závěry, prohlédněte si následující tvrzení: Drupal často používá objekty. Některé subsystémy Drupalu jsou objektově-orientované. Spousta modulů Drupalu je z velké části objektově-orientovaná. Drupal hojně používá návrhové vzory, jež můžeme používat i v procedurálním kódu. Přestože se v podstatné části knihy budete setkávat s procedurálním programováním, sem tam narazíte i na objektově-orientované programování. Pokud neznáte konvence a styly objektově orientovaného programování, nezoufejte na klíčových místech najdete vysvětlení. Databáze a systém MySQL Systém Drupal podporoval v minulosti dva databázové systémy MySQL a PostgreSQL. Verze Drupal 7 již však překonala toto omezení. Systém Drupal nyní používá výkonnou knihovnu PDO (PHP Data Objects), která je standardem v jazyce PHP 5. Tato knihovna představuje abstraktní vrstvu, jež umožňuje vývojářům podporovat více databázových systémů; včetně systémů MySQL, Postgre- SQL, SQLite, MariaDB a dalších. Ačkoliv se Drupal testuje jen na několika databázových systémech (MySQL, PostgreSQL a SQLite), je možné používat i další systémy SQL Server, Oracle, DB2 atd. Z důvodu zachování malé velikosti a čitelnosti kódu se však příklady v této knize zaměřují na systém MySQL. Kód SQL v knize by měl bez úprav fungovat také v systémech MariaDB, PostgreSQL a SQLite, ale další databázové systémy nejsou otestované. Jestliže najdete chybu, neváhejte a oznamte nám ji. Drupal nabízí databázové rozhraní API a konvence pro psaní kódu jazyka SQL (kupříkladu nepoužívejte výraz LIMIT v kódu jazyka SQL ). Jejich účelem je usnadnit psaní přenositelného zdrojového kódu. V této knize tudíž nenajdete pouze popis rozhraní API, ale také dotazy v jazyce SQL, které splňují standardní konvence Drupalu.

28 Kapitola 1: Úvod do vývoje modulů Drupalu Jazyky HTML, CSS a JavaScript Standardním formátem pro prezentaci dat na webu je jazyk HTML (HyperText Markup Language) doplněný styly z jazyka CSS (Cascading Style Sheets). Interaktivní komponenty na straně klienta se běžně píšou v jazyce JavaScript. Jako vývojáři Drupalu se v této knize setkáme se všemi třemi těmito technologiemi. Přestože nemusíte být ninjové JavaScriptu, abyste pochopili zde uvedený kód, získáte od této knihy nejvíce, pokud znáte tyto tři technologie. Další technologie Jak se zdá, Internet se těší na změny a existuje spousta dalších technologií, které se proslavily. Zmíníme se kupříkladu o technologiích, jako jsou kanály RSS (Really Simple Syndication), jazyk XML (extensible Markup Language), protokol XML-RPC a jiné. Ty jsou však pro nás až na druhém místě. Ačkoliv Drupal podporuje spoustu z nich, jejich používání není nedílnou součástí vývoje modulu nebo tématu vzhledu. Webový server Apache je již dlouho dobu předním webovým serverem, ale rozhodně není jediným. Přestože se Drupal původně psal pro server Apache, běží i na jiných webových serverech (včetně serverů IIS, LigHTTPD a nginx). Tato kniha se explicitně nezabývá vrstvou webového serveru, a to zejména z toho důvodu, že pro vývoj je málokdy nutné pracovat na tak nízké úrovni. Systém Drupal však očekává od této vrstvy notnou dávku zpracování včetně přepisování adres URL. Operační systém Poznámka Windows, Linux, Mac OS a BSD tato slova vyvolávají moderní online svaté války. Těmito rozepřemi se ale zabývat nebudeme. Systém Drupal funguje na většině oblíbených operačních systémech (ne-li na všech), a to včetně systému Windows a různých variant systémů UNIX/Linux. Poodhalíme roušku tajemství této knihy a řekneme si, že její autoři pracují především v operačních systémech Linux a Mac OS X. Kód z této knihy by měl však fungovat na všech systémech podporujících Drupal. Opět platí, že pokud narazíte na chybu ve zdrojových kódech, neváhejte a informujte nás. Drupal se snaží být nezávislý na platformě a stejně tak zde uvedené zdrojové kódy. Jelikož máme stručný úvod za sebou, můžeme se přesunout k architektuře Drupalu. Architektura Drupalu V předchozí části jsme si popisovali technologie pohánějící Drupal. Jak ale spolu tyto technologie spolupracují? Tato část poskytuje stručný přehled architektury Drupalu.

Architektura Drupalu 29 vyžádaný modul vyžádaný modul webový klient požadavek klienta knihovny jádra Drupalu vyžádaný modul modul modul téma vzhledu téma vzhledu databáze Obrázek 1.1. Hlavní komponenty Drupalu Z předchozího obrázku získáte velmi hrubou představu o struktuře Drupalu. Rovněž poznáte, jak Drupal zachází s požadavkem. O jednotlivých komponentách si řekneme ve zbytku této části. Nejprve si však projděme zjednodušený příklad toho, jak se zpracovává běžný požadavek na webových stránkách v Drupalu: 1. Uživatel zadá adresu http://priklad.cz/node/123 do webového prohlížeče a stiskne klávesu Enter. 2. Webový prohlížeč kontaktuje webový server na doméně priklad.cz a požádá jej o prostředek / node/123. Začněme vizuálním znázorněním diagram uvedený na obrázku 1.1 zobrazuje hlavní komponenty Drupalu. 1. Webový server rozpozná, že tento požadavek musí vyřídit prostředí PHP, a proto jej spustí (nebo kontaktuje), aby zpracovalo daný požadavek. 2. Prostředí PHP spustí soubor index.php systému Drupal a předá mu cestu /node/123. 3. Jádro Drupalu postoupí zaváděcí proces, přičemž inicializuje prostředky a následně použije systém nabídek, aby zjistilo, jak obsloužit požadavek na prostředek /node/123. 4. Systém uzlů odpoví na daný požadavek nahráním uzlu s identifikátorem 123. Tato data se typicky nahrávají z databáze. 5. Systém témat vzhledu převezme data uzlu a naformátuje je a aplikuje na ně styly v podstatě je transformuje na kusy kódu jazyka HTML s přidruženými styly jazyka CSS. 6. Jádro Drupalu dokončí zpracování (přičemž umožní spoustě dalších subsystémů provést svou část zpracování) a vrátí výsledná data klientovi. 7. Webový prohlížeč klienta vizuálně prezentuje kód jazyků HTML a CSS uživateli a společně s tím spustí nezbytný kód jazyka JavaScript. 8. Uživatel si prohlédne dokument.