38. konference EurOpen.CZ 11. května .2011
DRUPAL VOJTĚCH KUSÝ | @WOJTHA www.vojtechkusy.cz
KDO JSEM D 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 L ZÁKLADNÍ CHARAKTERISTIKY
• • • • • •
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 T A 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
TECHNOLOGIE ZÁKLADNÍ POŽADAVKY NA SERVER
• PHP: o Drupal 6: PHP 5.2, min PHP 4.4.0 o 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)
DRUPAL-ARCHITEKTURA D R U P A L J A K O S T A V E B N I C E L E G O
Contrib = moduly od přispěvatelů
Jádro
Vlastní modul
Jádro = knihovny + základní subsytémy Obrázek z knihy Pro Drupal Development, 2nd Edition
DRUPAL Z Á 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, Text o 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)
DRUPAL NENÍ MVC D 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
KONCEPTY ZÁSADNÍ
KONCEPTY V DRUPALU
• systém háků • Zásadní moduly: o CCK = Fields o Views o Features o Drush o Panels o ...
HÁKY (HOOKS) 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 moduly o 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 core http://media.brianshumate.com/stuff/dont_hack_drupal_core_wallpaper.png
SOUBOR .INFO R E G I S T R A Č N Í S O U B O R M O D U L U
mymodule.INFO
name = My first module description = Say hello. core = 7.x ;dependencies[] = profile ;dependencies[] = menu package = "My modules" ;php = 5.3
INI
SOUBOR .MODULE H L A V N Í S O U B O R M O D U L U
mymodule.MODULE
PHP
ZÁKLADNÍ KNIHOVNY Z Á 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 E Z Á K L A D N Í A R C H I T E K T U R A D R U P A L U
• Entity o Drupal 6 - uživatel, taxonomie, uzel, komentář jednotlivé nesouvisející objekty o 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 E Z Á 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ý obsah o příklady: Story, Page, Forum topic, Product • Taxonomie (taxonomy - entita) o Drupal systém pro kategorizaci obsahu o 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 E Z Á K L A D N Í A R C H I T E K T U R A D R U P A L U
• Modul o 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 • Distribuce o 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 E Z Á 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 I Z Á 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áze o 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 D Z Á 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 I Z Á 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 I CONTENT CONSTRUCTION KIT
M O D U L C C K Z Á 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 Z Á 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 Z Á 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 Z Á 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 S TVORBA POHLEDŮ NA DATA
• • • •
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ý uzel o 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 S TVORBA POHLEDŮ NA DATA
http://www.yoroy.com/elders/drupal/Views-sitemap.png
M O D U L V I E W S TVORBA POHLEDŮ NA DATA
M O D U L V I E W S Z Á 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 S TVORBA POHLEDŮ NA DATA
M O D U L V I E W S TVORBA POHLEDŮ NA DATA
M O D U L V I E W S TVORBA POHLEDŮ NA DATA
A CO OBRÁZKY? TVORBA POHLEDŮ NA DATA
• 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 S TVORBA POHLEDŮ NA DATA
PROČ ENTITY? 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 indexoval o 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
PROČ ENTITY? 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/entity o Wolfgang Ziegler (fago)
PANELS K 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
PANELS K D Y Ž P E V N É R E G I O N Y N E S T A Č Í
PANELS K D Y Ž P E V N É R E G I O N Y N E S T A Č Í
PANELS K D Y Ž P E V N É R E G I O N Y N E S T A Č Í
PANELS K 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 U S 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 U S 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 Ů
ŠABLONOVÁNÍ THEMING A JEDNODUCHÁ ÚPRAVA ŠABLON
• 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
atomicant.co.uk | atomicant.cz
ÚVOD DO ŠABLONOVÁNÍ THEMING A JEDNODUCHÁ ÚPRAVA ŠABLON
• Anatomie tématu vzhledu o .info soubor vyžadováno o .tpl.php soubory - přetížené šablony o template.php - přetížené theme funkce a pomocné funkce o styly - css o skripty - js,... o obrázky o atd...
atomicant.co.uk | atomicant.cz
ÚVOD DO ŠABLONOVÁNÍ THEMING A JEDNODUCHÁ ÚPRAVA ŠABLON
atomicant.co.uk | atomicant.cz
ÚVOD DO ŠABLONOVÁNÍ THEMING A JEDNODUCHÁ ÚPRAVA ŠABLON
atomicant.co.uk | atomicant.cz
ÚVOD DO ŠABLONOVÁNÍ THEMING A JEDNODUCHÁ ÚPRAVA ŠABLON
atomicant.co.uk | atomicant.cz
MULTISITE
One Drupal to rule them all!
INSTALAČNÍ PROFILY DISTRIBUCE A INSTALAČNÍ PROFILY
• Instalační profil o Instalační skript, který umožňuje Drupal přednastavit • Instalační profily na Drupal.org o
http://drupal.org/project/installation+profiles
atomicant.co.uk | atomicant.cz
INSTALAČNÍ PROFILY DISTRIBUCE A INSTALAČNÍ PROFILY
• Distribuce o Instalační "balíček" Drupalu = jádro + moduly + profil
atomicant.co.uk | atomicant.cz
DISTRIBUCE DISTRIBUCE A INSTALAČNÍ PROFILY
• 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 webu a trychlé o m i c a n t . cvybudování o . u k | a t o m i c a n t . ckomunitního/sociálního z
RDF NATIVNÍ PODPORA RDF
• 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 Obloha o má barvu o 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/
RDF NATIVNÍ PODPORA RDF
http://richard.cyganiak.de/2007/10/lod/lod-datasets_2010-09-22.html
RDF NATIVNÍ PODPORA RDF
RYCHLÁ DEMONSTRACE
VÝKON VÝKON V DRUPALU
• 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 E Z Á 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 I VYVÍJÍME PRO DRUPAL
ukázky programování pro Drupal (jestli zbude čas)
KOMUNITA KOLIK ?
• 5. ledna 2011 • Drupal 7 Release party - 326 akcí - 96 zemí
KOMUNITA KDE?
• 5. ledna 2011 • Drupal 7 Release party - 326 akcí - 96 zemí • http://www.drupal7releaseparty.org/
http://www.drupal7releaseparty.org/
KOMUNITA JÁDRO
• Jádro Drupalu 7 obsahuje patche od 954 lidí • 5 Čechů
DRUPAL 8 D 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
VIZE DRUPAL JAKO JEDNOTÍCÍ
PRVEK
http://buytaert.net/acquia-product-strategy-and-vision
VIZE DRUPAL JAKO JEDNOTÍCÍ
PRVEK
http://buytaert.net/acquia-product-strategy-and-vision
VIZE DRUPAL JAKO JEDNOTÍCÍ
PRVEK
http://buytaert.net/acquia-product-strategy-and-vision
VIZE DRUPAL JAKO JEDNOTÍCÍ
PRVEK
http://buytaert.net/acquia-product-strategy-and-vision
D R U P A L - V L A S T N O S T I K 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 ! SROVNÁNÍ S NEJVĚTŠÍMI KONKURENTY
• 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 ? DRUPAL.ORG
K D O P O U Ž Í V Á D R U P A L ? GARMIN.DK
K D O P O U Ž Í V Á D R U P A L ? LEFIGARO.FR
K D O P O U Ž Í V Á D R U P A L ? ECONOMIST.COM
K D O P O U Ž Í V Á D R U P A L ? LONDON.GOV.UK
K D O P O U Ž Í V Á D R U P A L ? WHITEHOUSE.GOV
K D O P O U Ž Í V Á D R U P A L ? ENERGY.GOV
K D O P O U Ž Í V Á D R U P A L ? PYTHONLINE.COM
K D O P O U Ž Í V Á D R U P A L ? GRAMMY.COM
K D O P O U Ž Í V Á D R U P A L ? SHC.STANFORD.EDU
K D O P O U Ž Í V Á D R U P A L ? WWW.DUKE.EDU
K D O P O U Ž Í V Á D R U P A L ? UBUNTU.COM
LITERATURA K D E S E D O Z V Ě D Ě T V Í C
• Pro Drupal 7 Development • Drupal 7 Module Development
SETKÁ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. 2011 http://london2011.drupal.org/
D Í K Y Z A P O Z O R N O S T R 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ý @wojtha http://drupal.org/user/56154 Atomic Ant Ltd. http://atomicant.co.uk http://atomicant.cz