Drupal Basics

1,561 views

Published on

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/

Published in: Technology, Design
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,561
On SlideShare
0
From Embeds
0
Number of Embeds
104
Actions
Shares
0
Downloads
22
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Drupal Basics

  1. 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. 2. Experienţă 4 ani de web development Am lucrat cu: Moodle, Joomla, Drupal, custom CMS & Frameworks 1 an de Drupal
  3. 3. De ce nu-mi place Drupal <ul><li>Nu văd keyword-ul class
  4. 4. E greu de învăţat
  5. 5. No backwards compatibility intre versiuni majore </li></ul>
  6. 6. Când aleg Drupal? <ul><li>Pentru proiecte mari (foarte des a început să fie folosit ca framework – vezi OpenAtrium)
  7. 7. Când vreau să scriu puţin cod pentru multe sarcini. (chiar si fara cod ;) )
  8. 8. Când dezvolt un proiect care va cere multă mentenanţă ulterioară (publishing websites) </li></ul>
  9. 9. Avantaje <ul><li>O comunitate foarte mare şi cu suport prompt (incl. pe twitter - #drupal)
  10. 10. Peste 2400 de module şi teme disponibile la download
  11. 11. Tradus in peste 80 de limbi
  12. 12. Peste 200.000 membri, 300 useri noi zilnic
  13. 13. Peste 1800 de contribuitori şi peste 1600 de service providers
  14. 14. 4 canale de IRC cu sute de membri
  15. 15. 1:4 rata de răspuns pentru bug reports
  16. 16. 100 000 download-uri de Drupal Core / lună </li></ul>
  17. 17. Drupal din punct de vedere POO Optimizare load-time (încarcarea dinamică a funcţiilor în funcţii) Implementează toate principiile POO: <ul><ul><li>Obiecte (module, teme)
  18. 18. Abstractizare (hook sistem)
  19. 19. Încapsulare (prin conventie: _user_save() - private, user_save() - public)
  20. 20. Polimorfism (ex. drupal_render() - generează codul html pentru un node)
  21. 21. Moştenire (temele sau modulele moştenesc comportamentul de baza şi extind, ex. themeName_links($links, $attributes) </li></ul></ul>
  22. 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. 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. 24. Drupal Module 3 tipuri: <ul><li>Core modules – vin cu distributia de Drupal si sunt recomandate de Comunitate
  25. 25. Contributed modules – sunt testate si recomandate de comunitate si pot fi downloadate de pe drupal.org
  26. 26. Custom modules – dezvoltate de companii / developeri privati, in special pentru anumite proiecte. </li></ul>
  27. 27. Developing a module Implementeaza hook-urile din core Ex. modules/hello_world.module function hello_world_menu() Implementeaza hook_menu() din core.
  28. 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. 29. Theming Controleaza look & feel -ul aplicatie Specifica reguinile de continut (tehnica frame) Poate contine CSS si Javascript necesar
  30. 30. Structura unei teme <ul><li>example.info (defineste regiunile, css si javascript) si optional tema parinte (base theme)
  31. 31. page.tpl.php – fisier template in format php ce controleaza look-ul generic al unei pagini
  32. 32. template.php – functii specifice template-ului (ex. se pot suprascrie elemente din module – textul unui buton) </li></ul>
  33. 33. Ex. Minelli.info ; $Id: minnelli.info,v 1.7 2007/12/04 20:58:44 goba Exp $ name = Minnelli description = Tableless, recolorable, multi-column, fixed width theme. version = VERSION core = 6.x base theme = garland stylesheets[all][] = minnelli.css <ul>Structura: <li>name required
  34. 34. description recommended
  35. 35. screenshot
  36. 36. version discouraged
  37. 37. core required
  38. 38. engine required
  39. 39. base theme
  40. 40. regions
  41. 41. features
  42. 42. stylesheets
  43. 43. scripts
  44. 44. php </li></ul>
  45. 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. 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. 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')
  48. 48. Va multumesc!
  49. 49. Intrebari ?

×