My presentation from PHP Geek Meet #4 - Cluj Napoca.
Drupal Basic: why and why not Drupal. And a basic module and theming guide.
http://blog.ag-prime.com/2009/09/prezentarea-la-geekmeet-drupal-basics/
1. Salut! Gabriel Ungureanu Web Developer & Owner AG Prime http://www.ag-prime.com/ LinkedIn: http://www.linkedin.com/in/gabrielungureanu Twitter: http://www.twitter.com/gabiu Drupal: http://drupal.org/user/279352
2. Experienţă 4 ani de web development Am lucrat cu: Moodle, Joomla, Drupal, custom CMS & Frameworks 1 an de Drupal
20. Polimorfism (ex. drupal_render() - generează codul html pentru un node)
21. Moştenire (temele sau modulele moştenesc comportamentul de baza şi extind, ex. themeName_links($links, $attributes)
22. Design Patterns Singleton : modulele si temele pot fi considerate clase singleton (au o singura instanta) Decorator : prin hooks, de ex. hook_node_load() , hook_node_view() - orice modul poate adauga comportamente unui nod Observer : hooks, ex. Cand se face o modificare la un vocabular se apelează hook_taxonomy_vocabulary_update() Bridge : abstractizarea bazei de date – modulele sunt independente de baza de date folosita
23. Design patterns Chain of Responsibility : la fiecare request se procesează calea primita, si se decide daca este un modul care sa proceseze acel request, daca utilizatorul are acces la el si ce functie va fi apelata pentru asta. Se merge in lant pana se rezolva, sau un modul refuza accesul pentru utilizator sau coada se termina. Command : de exemplu, un modul poate sa implementeze doar hook -urile de care are nevoie
24.
25. Contributed modules – sunt testate si recomandate de comunitate si pot fi downloadate de pe drupal.org
26. Custom modules – dezvoltate de companii / developeri privati, in special pentru anumite proiecte.
27. Developing a module Implementeaza hook-urile din core Ex. modules/hello_world.module function hello_world_menu() Implementeaza hook_menu() din core.
28. Exemplu modules/hello_world.module <?php /** * @file * Hello World Module */ /** * Implementation of hook_menu(). */ function hello_world_menu() { $items = array(); $items['hello_world'] = array( 'title' => 'Hello World', 'description' => 'Basic Hello World message', 'page callback' => 'hello_world_say_hello', 'access arguments' => array('say hello'), 'type' => MENU_SUGGESTED_ITEM, ); return $items; } /** * Function which generate page (this generate any content - you need only your own code...) */ function hello_world_say_hello() { return '<p>Hello world!</p>'; } ?>
29. Theming Controleaza look & feel -ul aplicatie Specifica reguinile de continut (tehnica frame) Poate contine CSS si Javascript necesar
30.
31. page.tpl.php – fisier template in format php ce controleaza look-ul generic al unei pagini
32. template.php – functii specifice template-ului (ex. se pot suprascrie elemente din module – textul unui buton)
45. .tpl.php files Nu necesita cunostinte suplimentare Cod HTML/PHP simplu Exemple ( si conventii de nume): page.tpl.php suprascrie templateul din system – modul de afisare al unei pagini page-front.tpl.php – prima pagina a site-ului search-result.tpl.php – pagina cu rezultatele cautarilor
46. template.php Poate implementa hook-uri: ex. themeName_links($links, $attributes = array('class' => 'links')) Poti crea pagina de administrare pentru theme (implementare hook_menu )
47. Drupal JS Implicit in core, Drupal incarca un obiect Drupal de forma { 'settings': {}, 'behaviors': {}, 'themes': {}, 'locale': {} }; Avem acces la variabile, comportamente, poate aplica functii de templating sau putem avea access la traduceri (Drupal.t) Se poat adauga scripturi (ex. din module) cu drupal_add_js($data = NULL, $type = 'module')