Dcourse Drupal 6 architecture

Preview:

DESCRIPTION

 

Citation preview

Drupal 6 architektúrája

Bemutatkozás

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

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

Drupal 6 és a tervezési minták

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

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

Observer

● Eseménykezelő minta

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

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

Convention over configuration

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

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

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

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

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

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

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

Példa hookra

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

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

Bootstrap

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

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)

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

Bootstrap: database

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

Bootstrap: access

● IP alapú tiltás

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

Bootstrap: language

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

Bootstrap: path

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

létezik

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