38. konference europen.cz 11. května · d r i e s b u y t a e r t a n e b k d o z a t o m Ů Ž e...
TRANSCRIPT
D R U P A LV O J T Ě C H K U S Ý | @ W O J T H A
38. konference EurOpen.CZ11. května .2011
www.vojtechkusy.cz
K D O J S E MD R U P A L V Ý V O J Á Ř / E V A N G E L I Z Á T O R & P H D. S T U D E N T
• postgraduální studium na ČVUT FSV• Katedra inženýrské informatiky• Obor informační systémy ve stavebnictví
Software na řízení projektů; Modelování dynamických systémů
• 8 let na volné noze: PHP, webdesign, Drupal (5 let)• Drupal.cz, Drupal.org• reference: spolupráce na:
• od února 2011 Atomic Ant Ltd. http://atomicant.co.uk
C O J E D R U P A LZ Á K L A D N Í C H A R A K T E R I S T I K Y
• vysoce modulární• open source• content management system (CMS)• nebo content management framework (CMF)• napsaný v PHP• snadno rozšiřitelný - téměř každý aspekt Drupalu
lze ovlivnit pomocí modulů nebo témat
Druplicon vs Drupal logo
D R I E S B U Y T A E R TA N E B K D O Z A T O M Ů Ž E ...
• původní autor: Dries Buytaert, kol. roku 2000• Drupal 1.0.0 - opensource projekt od 15.1.2001• vlastní DrupalTM trademark• zakladatel - enterprise Drupal support
T E C H N O L O G I EZ Á K L A D N Í P O Ž A D A V K Y N A S E R V E R
• PHP:o Drupal 6: PHP 5.2, min PHP 4.4.0o Drupal 7: PHP 5.3, min PHP 5.2.5
• Podporované databáze:o Drupal 6: MySQL 4.1+, PostgreSQL 7.1+,
(Oracle – modul) o Drupal 7: PHP PDO (MySQL, PostgreSQL,
SQLite, ...), MS SQL a MS Azure (modul)
• WebServer:o Apache (Linux/Windows) o Nginx (Linux/Windows)o Lighttpd (Linux/Windows)o IIS (Windows only)
D R U P A L - A R C H I T E K T U R AD R U P A L J A K O S T A V E B N I C E L E G O
Jádro=knihovny+základnísubsytémy
Contrib= moduly odpřispěvatelů
Jádro
Vlastnímodul
Obrázek z knihy Pro Drupal Development, 2nd Edition
D R U P A LZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
• Srdce systému :=o knihovny základních funkcích o povinné moduly:
System, User, Node, Filter, Block System, User, Node, Filter,
Field, Field SQL Storage, Texto téma vzhledu (frontend a administrační)
• Nepovinné:o Blog, Taxonomy, Comment, Poll …o a dalších asi 20 modulů
• Contrib:o Asi 7000 modulů a témat vzhledu, ke stažení na
drupal.org (bezplatně, GNU GPL v2)
D R U P A L N E N Í M V CD R U P A L N E N Í M V C A L E P A C
• Presentation-abstraction-control
Zdroj: http://en.wikipedia.org/wiki/File:Pac-schema.png
K O N C E P T YZ Á S A D N Í K O N C E P T Y V D R U P A L U
• systém háků• Zásadní moduly:
o CCK = Fieldso Viewso Featureso Drusho Panelso ...
H Á K Y ( H O O K S ) D R U P A L Z P O H L E D U V Ý V O J Á Ř E
• Až do Drupalu 6 bylo jádro Drupalu s jedinou výjimkou (xml parser) striktně procedurální
• Drupal má poměrně unikátní architekturu, která spočívá v systému háků (hooks) a jmenných konvencích (naming conventions)o komunikace jádra s modulyo komunikace modulů mezi sebou
• Modifikační háky (alter hooks) – umožňují měni výstup jiných modulů či jádra
• Od Drupalu 7 změna, procedurální jádro a systém háků zůstává, ale subsystémy jsou objektové
D R U P A L 6 M Á 7 3 H Á K Ů ... A D R U P A L 7 J E Š T Ě V Í C
hook_access, hook_actions_delete, hook_action_info, hook_action_info_alter, hook_block, hook_boot, hook_comment, hook_cron, hook_db_rewrite_sql,
hook_delete, hook_disable, hook_elements, hook_enable, hook_exit, hook_file_download, hook_filter, hook_filter_tips, hook_flush_caches,
hook_footer, hook_form, hook_forms, hook_form_alter, hook_form_FORM_ID_alter, hook_help, hook_hook_info, hook_init,
hook_insert, hook_install, hook_link, hook_link_alter, hook_load, hook_locale, hook_mail, hook_mail_alter, hook_menu, hook_menu_alter,
hook_menu_link_alter, hook_nodeapi, hook_node_access_records, hook_node_grants, hook_node_info, hook_node_operations, hook_node_type,
hook_openid, hook_perm, hook_ping, hook_prepare, hook_profile_alter, hook_requirements, hook_schema, hook_schema_alter, hook_search, hook_search_preprocess, hook_system_info_alter, hook_taxonomy,
hook_term_path, hook_theme, hook_theme_registry_alter, hook_translated_menu_link_alter, hook_translation_link_alter,
hook_uninstall, hook_update, hook_update_index, hook_update_last_removed, hook_update_N, hook_update_projects_alter,
hook_update_status_alter, hook_user, hook_user_operations, hook_validate, hook_view, hook_watchdog, hook_xmlrpc
Zásada: Don’t hack corehttp://media.brianshumate.com/stuff/dont_hack_drupal_core_wallpaper.png
S O U B O R . I N F OR E G I S T R A Č N Í S O U B O R M O D U L U
mymodule.INFO INI
name = My first moduledescription = Say hello. core = 7.x;dependencies[] = profile;dependencies[] = menupackage = "My modules";php = 5.3
S O U B O R . M O D U L EH L A V N Í S O U B O R M O D U L U
mymodule.MODULE PHP
<?php
/** * Implementation of hook_init() */function mymodule_init() { drupal_set_message(t('Hello World'));}
Z Á K L A D N Í K N I H O V N YZ Á K L A D N Í R O Z H R A N Í D R U P A L A P I
• Překlad (lokalizace) a filtrování výstupu• Databázová vrstva• Menu systém a routování• Systém práv přístupu• Form API - rozhraní pro práci s formuláři• File API - rozhraní pro práci se soubory• Field API - rozhraní pro práci s datovými poli• Entity - obecná implementace Drupal objektů, API
pro vytváření dalších entit• API pro přístup k Drupal objektům:
Node, Taxonomy, Comment, User• Šablonovací vrstva - hook_theme(), theme()
D R U P A L T E R M I N O L O G I EZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
• Entityo Drupal 6 - uživatel, taxonomie, uzel, komentář
jednotlivé nesouvisející objektyo Drupal 7 entity
všechny tyto objekty jsou entity některé jsou tzv. "fieldable" - je možné je
rozšířit pomocí Field API (dříve modul CCK)
D R U P A L T E R M I N O L O G I EZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
• Uzel (node - entita)o část obsahu, obvykle má nadpis a nějaký obsaho příklady: Story, Page, Forum topic, Product
• Taxonomie (taxonomy - entita)o Drupal systém pro kategorizaci obsahuo obsahuje termíny (terms) organizované ve
slovnících (vocabularies)• Háky/háčky (hooks)
o Systém háků umožňuje Drupalu komunikovat s moduly a také umožňuje komunikovat modulům sobě navzájem
D R U P A L T E R M I N O L O G I EZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
• Modulo Je obecně jednotka která rozšiřuje Drupal o
nějaké funkce, nebo upravuje chování Drupalu• Téma (Theme)
o Mění "look & feel" Drupalu• Instalační profil
o Instalační skript, který umožňuje Drupal přednastavit
• Distribuceo Instalační balení Drupalu = jádro + moduly +
profil
D R U P A L T E R M I N O L O G I EZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
• Field - pole - (Fields API)o jednoduchý datový typ, který je možné navěsit
na entity• Field instances - instance polí
o sdílená pole mezi entitami• Bundle - balík
o instance entity skupina polí
o typ obsahu (uzlu), slovníky,...
M O D U L C C K - F i e l d s A P IZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
• CCK (Fields UI) poskytuje UI pro vytváření typů obsahu
• stará se o ukládání a nahrávání dat z databázeo automaticky vytváří DB tabulky s příslušnými
sloupečky (single vs. multiple)o kromě toho ukládá podrobné nastavení všech
definic políček do vlastní tabulky (metadata)• dále poskytuje
o formulářové prvky (widget) a jejich validaci,o zobrazení dat je možné několika způsoby
pomocí formátovačů (formatters)
C C K P O L E = F I E L DZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
M O D U L C C K - F i e l d s A P IZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
DEMONSTRACE
M O D U L C C K / F I E L D S A P IC O N T E N T C O N S T R U C T I O N K I T
M O D U L C C KZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
M O D U L C C KZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
M O D U L C C KZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
M O D U L C C KZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
M O D U L V I E W ST V O R B A P O H L E D Ů N A D A T A
• nástroj na generování pohledů na data• vizuální editor pro vytváření dotazů• filtrování, třídění dat• široké možnosti formátování
o nativní formatování - např. zobrazit celý uzelo nebo vlastní - např. zobrazit jako tabulku
• vytváření hlavního obsahu nebo bloků, RSS zdrojů, CSV, XML apod
• od verze 6.x-3.0 a 7.x-3.0 umožňuje práci i s externími daty (YQL, Google API, Wolfram Search...)
M O D U L V I E W ST V O R B A P O H L E D Ů N A D A T A
http://www.yoroy.com/elders/drupal/Views-sitemap.png
M O D U L V I E W ST V O R B A P O H L E D Ů N A D A T A
M O D U L V I E W SZ Á K L A D N Í A R C H I T E K T U R A D R U P A L U
DEMONSTRACE
M O D U L V I E W ST V O R B A P O H L E D Ů N A D A T A
M O D U L V I E W ST V O R B A P O H L E D Ů N A D A T A
M O D U L V I E W ST V O R B A P O H L E D Ů N A D A T A
A C O O B R Á Z K Y ?T V O R B A P O H L E D Ů N A D A T A
• V Drupal 7 použijeme vestavěné Image Styles• V Drupal 6 doinstalujeme ImageCache a ImageApi
M O D U L V I E W ST V O R B A P O H L E D Ů N A D A T A
P R O Č E N T I T Y ?E N T I T Y - N O V Ý K O N C E P T
• Použití Node API pro řešení některých problémů sice urychlilo práci, ...
• ... na druhou stranu to ale někdy znamenalo řešit spoustu jiných problémů:o co když nechci, aby se můj typ uzlu indexovalo proč musí mít každý typ uzlu titulek a URL?o ...
• Node API bylo skutečně dobré pro řešení klasických typů obsahu jako je Stránka, Článek, Produkt ...
• ... v ostatních případech použití Node API občas připomínalo drbání se pravou rukou za levým uchem
P R O Č E N T I T Y ?E N T I T Y - N O V Ý K O N C E P T
• Vznikla tak silná potřeba abstrahovat od konceptu uzlů• Entita je OBJEKT se kterým Drupal, umí velmi dobře
pracovat• Entitou může být cokoliv:
o Uzel (Node)o Uživatel (User)o Komentář (Comment)o Uživatel (User)o Blok (Block)o Položka menu...
• Entity API http://drupal.org/project/entityo Wolfgang Ziegler (fago)
P A N E L SK D Y Ž P E V N É R E G I O N Y N E S T A Č Í
• Vytváření flexibilních dynamických šablon a layoutů stránek bez nutnosti kódovat extra šablony
• Definování libovolných regionů• Možné měnit i "za provozu", převádění obsahu
mezi regiony• Podobná filozofie jako modul Views – mají i
stejného autora
P A N E L SK D Y Ž P E V N É R E G I O N Y N E S T A Č Í
P A N E L SK D Y Ž P E V N É R E G I O N Y N E S T A Č Í
P A N E L SK D Y Ž P E V N É R E G I O N Y N E S T A Č Í
P A N E L SK D Y Ž P E V N É R E G I O N Y N E S T A Č Í
A N A T O M I E D R U P A L W E B US T R U K T U R A S T R Á N K Y P Ř I P O U Ž I T Í O B V Y K L Ý C H M O D U L Ů
A N A T O M I E D R U P A L W E B US T R U K T U R A S T R Á N K Y P Ř I P O U Ž I T Í O B V Y K L Ý C H M O D U L Ů
Š A B L O N O V Á N ÍT H E M I N G A J E D N O D U C H Á Ú P R A V A Š A B L O N
a t o m i c a n t . c o . u k | a t o m i c a n t . c z
• Oddělení logiky od prezentace• Každý prvek má nějaký presenter, tzn. nějakou výchozí
šablonu, presentery jsou na sobě navrstvené• V tématu můžeme tyto výchozí presentery „přetěžovat“
tak, že vytvoříme svoje vlastní• Šablona v tématu má přednost před výchozí šablonou v
modulu• Jakýkoliv výstup modulu by mělo jít přepsat, pokud to
nejde, jedná se o chybu• Výstup by měl být bezpečnostně ošetřen, ale nelze na
vývojáře spoléhat, obzvláště u contrib modulů• .info soubor + css = minimální šablona
Ú V O D D O Š A B L O N O V Á N ÍT H E M I N G A J E D N O D U C H Á Ú P R A V A Š A B L O N
a t o m i c a n t . c o . u k | a t o m i c a n t . c z
• Anatomie tématu vzhleduo .info soubor vyžadovánoo .tpl.php soubory - přetížené šablonyo template.php - přetížené theme funkce a pomocné funkceo styly - csso skripty - js,...o obrázkyo atd...
Ú V O D D O Š A B L O N O V Á N ÍT H E M I N G A J E D N O D U C H Á Ú P R A V A Š A B L O N
a t o m i c a n t . c o . u k | a t o m i c a n t . c z
Ú V O D D O Š A B L O N O V Á N ÍT H E M I N G A J E D N O D U C H Á Ú P R A V A Š A B L O N
a t o m i c a n t . c o . u k | a t o m i c a n t . c z
Ú V O D D O Š A B L O N O V Á N ÍT H E M I N G A J E D N O D U C H Á Ú P R A V A Š A B L O N
a t o m i c a n t . c o . u k | a t o m i c a n t . c z
M U L T I S I T E
One Drupal to rule them all!
I N S T A L A Č N Í P R O F I L YD I S T R I B U C E A I N S T A L A Č N Í P R O F I L Y
a t o m i c a n t . c o . u k | a t o m i c a n t . c z
• Instalační profilo Instalační skript, který umožňuje Drupal přednastavit
• Instalační profily na Drupal.orgo http://drupal.org/project/installation+profiles
I N S T A L A Č N Í P R O F I L YD I S T R I B U C E A I N S T A L A Č N Í P R O F I L Y
a t o m i c a n t . c o . u k | a t o m i c a n t . c z
• Distribuceo Instalační "balíček" Drupalu = jádro + moduly + profil
D I S T R I B U C ED I S T R I B U C E A I N S T A L A Č N Í P R O F I L Y
a t o m i c a n t . c o . u k | a t o m i c a n t . c z
• OpenAtrium - http://openatrium.com/ groupware distribuce určená pro intranety (původně vyvinuto jako intranet pro mezinárodní pracovní skupiny Světové banky)
• OpenPublish - http://openpublishapp.com/ distribuce určená pro publikační portály
• OpenPublic - http://openpublicapp.com/ - distribuce určená pro státní organizace
• Pressflow - http://pressflow.org/ - distribuce/fork Drupalu uzpůsobená pro vyšší výkon
• Tattler (app) - http://tattlerapp.com/ - agregační nástroj pro monitorování zadaných témat v libovolných veřejných zdrojích a sociálních sítích
• Acquia Drupal - http://acquia.com/products-services/acquia-drupal
• Drupal Commons - distribuce společnosti Acquia určená pro rychlé vybudování komunitního/sociálního webu
R D FN A T I V N Í P O D P O R A R D F
• Resource Description Framework (RDF)• česky systém popisu zdrojů• RDF je jednou z hlavních komponent sémantického
webu• triplet / triple / trojice: podmět-vlastnost-předmět• "Obloha má modrou barvu":
o Oblohao má barvuo modrou
• I have a dream for the Web [in which computers] become capable of analyzing all the data on the Web ...– Tim Berners-Lee, 1999
• http://semantic-drupal.com/
R D FN A T I V N Í P O D P O R A R D F
http://richard.cyganiak.de/2007/10/lod/lod-datasets_2010-09-22.html
R D FN A T I V N Í P O D P O R A R D F
RYCHLÁ DEMONSTRACE
V Ý K O NV Ý K O N V D R U P A L U
• Pokud nenačítá data z cache je Drupal obecně relativně pomalý a náročný na zdroje
• Operační paměť, databáze i procesor (zejména kvůli renderování)
• Je to daň za architekturu• Naštěstí ta samá architektura umožňuje data
centrálně cachovat a nebo rozkládat zátěž na více strojů
• Memcache, Varnish, Squid, CDN, NoSQL DB pro některé tabulky
• Modul Boost alias „poorman’s Varnish“• Optimalizace frontendu: agregace CSS a JSS,
image sprites• Weby pro anonymní uživatele zcela bez problémů
D E V E L N Á S T R O J EZ Á K L A D N Í N Á S T R O J E P R O V Ý V O J V D R U P A L U
• Devel - základní toolkit pro vývojáře• http://drupal.org/project/devel• Drush – Drupal Shell - Drupal v příkazové
řádce http://drupal.org/project/drush• Coder - kontrola standardů a upgrade modulů• http://drupal.org/project/coder• Backup and Migrate - zálohování databáze
http://drupal.org/project/backup_migrate• SimpleTest - testovací framework (D7+ v jádru)• http://drupal.org/project/simpletest• Translation template extractor - extrakce
překladů: http://drupal.org/project/potx
D R U P A L A P IV Y V Í J Í M E P R O D R U P A L
ukázky programování pro Drupal(jestli zbude čas)
K O M U N I T A
• 5. ledna 2011• Drupal 7 Release party - 326 akcí - 96 zemí
K O L I K ?
K O M U N I T AK D E ?
• 5. ledna 2011• Drupal 7 Release party - 326 akcí - 96 zemí• http://www.drupal7releaseparty.org/
http://www.drupal7releaseparty.org/
K O M U N I T AJ Á D R O
• Jádro Drupalu 7 obsahuje patche od 954 lidí
• 5 Čechů
D R U P A L 8D r u p a l w e b j a k o s o u č á s t g i g a n t i c k é h o g r a f u
• „The RAM is new disk and the disk is new tape“CRUD => CRA (P)
• UUID v jádře• Pluggable core• Orientace na mobilní zařízení• Orientace na webservices
V I Z ED R U P A L J A K O J E D N O T Í C Í P R V E K
http://buytaert.net/acquia-product-strategy-and-vision
V I Z ED R U P A L J A K O J E D N O T Í C Í P R V E K
http://buytaert.net/acquia-product-strategy-and-vision
V I Z ED R U P A L J A K O J E D N O T Í C Í P R V E K
http://buytaert.net/acquia-product-strategy-and-vision
V I Z ED R U P A L J A K O J E D N O T Í C Í P R V E K
http://buytaert.net/acquia-product-strategy-and-vision
D R U P A L - V L A S T N O S T IK L Í Č O V É V L A S T N O S T I D R U P A L U
+ Rozšiřitelnost+ 7500 modulů a témat na drupal.org- Málo kvalitních témat (obtížné, musí být univerzální)+ Až 80-100% práce i u velkých webů lze vyřešit
pouhou konfigurací přes UI- Konfigurace je držena v databázi, nešikovné pro
dlouhodobý vývoj (ale nástroje už existují)+ Bezpečnost+ Škálovatelnost+ Vývojářská komunita+ Důraz na standardy a dokumentaci- Bez podpůrných systémů náročný na zdroje+/- Není zpětná kompatibilita (major verze)
W O R D P R E S S , J O O M L A !S R O V N Á N Í S N E J V Ě T Š Í M I K O N K U R E N T Y
• Wordpress určen obecně spíš na jednoduché weby s jedním administrátorem
• Joomla! určena pro menší až po střední weby• Drupal zvládne malé weby i velké weby, je připravený na škálování
• Pro menší weby je ale náročnější na zdroje• Neexistuje pro něj trh hotových aplikací, takže vývoj může být dražší
• I když se Drupal snaží být stále více „user-friendly“, jeho hlavní cílovou skupinou jsou vývojáři či geekové, kterým vyhovuje flexibilita a možnost pokročilých nastaveních kdekoliv a kdykoliv
• Drupal není produkt, za produkty se dají považovat až distribuce, v porovnání s Wordpressem se jedná jen o „polotovar“
K D O P O U Ž Í V Á D R U P A L ?
?
K D O P O U Ž Í V Á D R U P A L ?D R U P A L . O R G
K D O P O U Ž Í V Á D R U P A L ?G A R M I N . D K
K D O P O U Ž Í V Á D R U P A L ?L E F I G A R O . F R
K D O P O U Ž Í V Á D R U P A L ?E C O N O M I S T . C O M
K D O P O U Ž Í V Á D R U P A L ?L O N D O N . G O V . U K
K D O P O U Ž Í V Á D R U P A L ?W H I T E H O U S E . G O V
K D O P O U Ž Í V Á D R U P A L ?E N E R G Y . G O V
K D O P O U Ž Í V Á D R U P A L ?P Y T H O N L I N E . C O M
K D O P O U Ž Í V Á D R U P A L ?G R A M M Y . C O M
K D O P O U Ž Í V Á D R U P A L ?S H C . S T A N F O R D . E D U
K D O P O U Ž Í V Á D R U P A L ?W W W . D U K E . E D U
K D O P O U Ž Í V Á D R U P A L ?U B U N T U . C O M
L I T E R A T U R AK D E S E D O Z V Ě D Ě T V Í C
• Pro Drupal 7 Development• Drupal 7 Module
Development
S E T K Á N ÍK D E S E D O Z V Ě D Ě T V Í C
• Komunita Drupal.cz• BRNO - 12. května 2011 – Drupal hospoda• PRAHA - 18. května 2011 – Drupal hospoda• PRAHA – konec května – Drupal setkání v Hubu
• Drupalcon London 2011, 22.-26. 8. 2011http://london2011.drupal.org/
D Í K Y Z A P O Z O R N O S TR O Z L O U Č E N Í A P R O S T O R N A D O T A Z Y
"Come for software, stay for community"
Vojtěch Kusý @wojthahttp://drupal.org/user/56154
Atomic Ant Ltd.http://atomicant.co.uk
http://atomicant.cz