Top Banner
Drupal 6 architektúrája
28

Dcourse Drupal 6 architecture

Dec 13, 2014

Download

Technology

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dcourse Drupal 6 architecture

Drupal 6 architektúrája

Page 2: Dcourse Drupal 6 architecture

Bemutatkozás

● Demeter-Haludka Tamás● Programtervező informatikus hallgató● 2 éve Drupal fejlesztő a Pronovix-nál● Számos contrib modul karbantartója

Page 3: Dcourse Drupal 6 architecture

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

Page 4: Dcourse Drupal 6 architecture

Drupal 6 és a tervezési minták

● Presentation-abstraction-control● Observer● Visitor● Chain of responsibility● Convention over configuration

Page 5: Dcourse Drupal 6 architecture

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

Page 6: Dcourse Drupal 6 architecture
Page 7: Dcourse Drupal 6 architecture
Page 8: Dcourse Drupal 6 architecture
Page 9: Dcourse Drupal 6 architecture

Observer

● Eseménykezelő minta

Page 10: Dcourse Drupal 6 architecture

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

Page 11: Dcourse Drupal 6 architecture

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

Page 12: Dcourse Drupal 6 architecture

Convention over configuration

● Elnevezési konvenciók konfiguráció helyett

● Ügyes elnevezésekkel a keretrendszer kitalálja, hogy miket kell használnia

Page 13: Dcourse Drupal 6 architecture

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

Page 14: Dcourse Drupal 6 architecture

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()

Page 15: Dcourse Drupal 6 architecture

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()

Page 16: Dcourse Drupal 6 architecture

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()

Page 17: Dcourse Drupal 6 architecture

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

Page 18: Dcourse Drupal 6 architecture

Példa hookra

Page 19: Dcourse Drupal 6 architecture

Mi történik egy lapletöltéskor?

● Bootstrap● menu_execute_active_handler()● theme('page')

Page 20: Dcourse Drupal 6 architecture

Bootstrap

● Configuration● Early page cache● Database● Access● Session● Late page cache● Language● Path● Full

Page 21: Dcourse Drupal 6 architecture

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)

Page 22: Dcourse Drupal 6 architecture

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

Page 23: Dcourse Drupal 6 architecture

Bootstrap: database

● Kapcsolódás az adatbázishoz● Lock api betöltése

Page 24: Dcourse Drupal 6 architecture

Bootstrap: access

● IP alapú tiltás

Page 25: Dcourse Drupal 6 architecture

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

Page 26: Dcourse Drupal 6 architecture

Bootstrap: language

● Nyelv meghatározása (beállítások illetve HTTP_ACCEPT_LANGUAGE vizsgálata)

Page 27: Dcourse Drupal 6 architecture

Bootstrap: path

● Path kiderítése a $_GET['q'] alapján● Aliasok visszafejtése● custom_url_rewrite_inbound() hívása, ha

létezik

Page 28: Dcourse Drupal 6 architecture

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