Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Dcourse Drupal 6 architecture

645 views

Published on

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Dcourse Drupal 6 architecture

  1. 1. Drupal 6 architektúrája
  2. 2. Bemutatkozás ● Demeter-Haludka Tamás ● Programtervező informatikus hallgató ● 2 éve Drupal fejlesztő a Pronovix-nál ● Számos contrib modul karbantartója
  3. 3. Tervezési minták ● Részei a programozói folklórnak ● Általános megoldások általános problémákra ● Közös szótár a programozók között
  4. 4. Drupal 6 és a tervezési minták ● Presentation-abstraction-control ● Observer ● Visitor ● Chain of responsibility ● Convention over configuration
  5. 5. Presentation abstraction control ● Ismertebb változat: hierarchical MVC (modell-view-controller) ● Különbség: a HMVC kevésbé szigorú abban, hogy a view-k és modellek kommunikálhat egymással, a kontroller kihagyásával
  6. 6. Observer ● Eseménykezelő minta
  7. 7. Visitor ● Az algoritmus külonválasztása az adatstruktúrától ● Előny: új műveleteket lehet könnyedén definiálni az adatstruktúrán ● Általában arra használják, hogy virtuális függvényeket adjanak osztályok egy csoportjához azok módosítása nélkül ● Drupalban az Observeren keresztül került implementálásra
  8. 8. Chain of responsibility ● Egy parancs és sok végrehajtó egység sorban ● Mindegyik végrehajtó egység tudja, hogy az adott parancsot végre tudja-e hajtani, és ha csak részben, akkor mit kell átadni a többi végrehajtó egységnek
  9. 9. Convention over configuration ● Elnevezési konvenciók konfiguráció helyett ● Ügyes elnevezésekkel a keretrendszer kitalálja, hogy miket kell használnia
  10. 10. Tervezési minták Drupalban ● A rendszer egésze: Presentation abstraction control ● Hook rendszer: observer és visitor ● Menü rendszer: chain of responsibility ● Convention over configuration: rengeteg helyen
  11. 11. A hook rendszer ● Alapötlet: convention over configuration ● A hookokra mindig hook_hookneve() formátumban hivatkozunk, ahol implementáláskor a hook szót kicseréljük a modul nevével, pl.: hook_form_alter() → taxonomy_form_alter()
  12. 12. Hookok csoportosítása ● Alter hookok: visitor minta az observeren keresztül megvalósítva ● A hook neve _alter-rel végződik ● Valamilyen adatstruktúra referenciaként van átadva, és ezt lehet módosítani ● Hívása: drupal_alter() ● Pl.: hook_form_alter()
  13. 13. Hookok csoportosítása ● Event hookok: az összes többi ● Valamilyen eseményre lehet reagálni, és további műveleteket elvégezni ● Hívása: module_invoke_all() ● Példa: hook_nodeapi()
  14. 14. Hookok működése ● Meghívás: név, majd a paraméterek listája ● Végigiterál az engedélyezett modulok listáján (amik a system táblában vannak tárolva, ahol van egy weight mező, ami alapján történik a rendezés – ezt csak speciális modulok használják ki) ● Ha létezik a modulneve_hookneve függvény, akkor a megadott paraméterekkel meghívásra kerül
  15. 15. Példa hookra
  16. 16. Mi történik egy lapletöltéskor? ● Bootstrap ● menu_execute_active_handler() ● theme('page')
  17. 17. Bootstrap ● Configuration ● Early page cache ● Database ● Access ● Session ● Late page cache ● Language ● Path ● Full
  18. 18. Bootstrap: configuration ● register_globals káros hatásainak száműzése ● Időzítő indítása ● Konfigurációs állományok betöltése (pl.: settings.php)
  19. 19. Bootstrap: early page cache ● Betölti a cache-t ● Megnézi, hogy implementálva van-e a page_cache_fastpath() ● Ha igen, akkor kilép
  20. 20. Bootstrap: database ● Kapcsolódás az adatbázishoz ● Lock api betöltése
  21. 21. Bootstrap: access ● IP alapú tiltás
  22. 22. Bootstrap: late page cache ● Változók inicializálása ● Page cache ellenőrzése ● Ha nem létezik vagy létezik és az aggresszív cache-elés nincs engedélyezve, akkor a modulok betöltődnek és a hook_boot lefut ● Ha létezik a page cache, akkor kiíródik a kimenetre, és ha nincs aggresszívre állítva a cache, akkor meghívódik a hook_exit, majd kilép
  23. 23. Bootstrap: language ● Nyelv meghatározása (beállítások illetve HTTP_ACCEPT_LANGUAGE vizsgálata)
  24. 24. Bootstrap: path ● Path kiderítése a $_GET['q'] alapján ● Aliasok visszafejtése ● custom_url_rewrite_inbound() hívása, ha létezik
  25. 25. Bootstrap: full ● Alrendszerek és API-k betöltése ● Hibakezelő beállítása ● Magic quotes GPC visszaállítása ● Összes modul betöltése ● hook_init lefuttatása

×