Reklama

zonerbooks.cz | zoner.cz | czechia.com | regzone.cz | inshop.cz | inmail.cz | zonerpress.cz | zonerantivirus.com | zonerama.cz

interval.cz

Vývoj modulů pro CMS systém Drupal 6.x (2. díl)

05. 11. 2009 | Jan Sova | Redakční systémy | Komentáře: 4

V tomto druhém pokračování seriálu o vývoji modulů pro Drupal nahlédneme hlouběji do systému samotného. Probereme souborový systém a zpracování požadavků Drupalem.

Souborový systém

Drupal má vlastní souborový systém, který musíme při vývoji a správě obsahu respektovat. V krátkosti projdeme všechny hlavní adresáře a zmíníme se o důležitých podadresářích.

includes Obsahuje základní soubory jádra Drupalu.
misc Obsahuje JavaScriptový kód, miscellaneous (v překladu znamená miscellaneous "různého druhu") ikony a obrázky, které jsou aktivní během instalace systému.
modules Zde jsou obsaženy základní moduly jádra Drupalu. Každý z modulů ve své vlastní složce.
Rozhodně nedoporučuji (jak jsme se již zmiňovali) tuto složkou používat k uložení rozšiřujících modulů (i když se z funkčního hlediska o chybu nejedná).
profiles Složka pro profily Drupalu z nichž si můžeme vybrat (pokud není prázdná) při instalaci a ovlivnit tak jádro a nastavení Drupalu. Dobrým příkladem je profil pro elektronický obchod (e-commerce).
sites V tomto adresáři by měli být uloženy všechny vaše modifikace sítě.
Do složky site/all/modules budeme ukládat vlastní moduly a do složky site/all/themes vlastní themes.
themes Obsahuje template engines (které interpretují skriptovací jazyky v nichž jsou napsány themes) a základní themes.

Shrnutí: vlastní modifikace Drupalu budeme ukládat do těchto složek:

  • sites/all/modules - pokud půjde o nový modul
  • sites/all/themes - pokud půjde o nové theme

Upozornění: při instalaci Drupalu (přesněji některých verzí) se vytvoří pouze adresář sites/all/, podadresáře modules a themes je třeba vytvořit dodatečně a ručně. Častou začátečnickou chybou je nahrát modul přímo do adresáře sites/all/. Z tété lokace jsou však moduly pro Drupal neviditelné.

Zpracování požadavku

Při vývoji modulů je velice užitečné mít rámcový přehled o tom, jak Drupal zpracovává požadavky (requests) na jejichž základě generuje stránky pro návštěvníky.

Na proces se podíváme jen v nezbytné míře a pokud chcete získat komplexnější náhled do zpracování požadavku Drupalem, doporučuji studium souboru index.php (ten zpracovává většinu requestů Drupalu) s debuggerem a velkou dávkou trpělivosti. Zmíníme se o některých důležitých souborech a funkcích, které jsou za proces odpovědné, což by mohlo být pro vás užitečné v případě hlubšího studia problematiky.

Celý proces od zavolání souboru index.php po vygenerování HTML kódu požadované stránky můžeme rozdělit do dvou částí:

  • Bootstrap proces - zaváděcí proces
  • Theming - vygenerování konečného HTML kódu na základě aktivního theme a dat z databáze

Bootstrap proces (zaváděcí proces)

Zaváděcí proces je prvním z procesů, kterým začíná zpracování požadavku od uživatele. Jeho vykonání zajišťuje první kódový řádek v souboru index.php:

require_once './includes/bootstrap.inc';

Zaváděcí proces je definován v souboru includes/bootstrap.inc. Zde se také v komentářích můžeme dočíst, že se proces skládá z následujících částí:

  1. inicializace a konfigurace
  2. ranná page cache
  3. inicializace databázové vrstvy
  4. identifikace uživatele a případné odmítnutí přístupu
  5. session
  6. pozdní page cache
  7. paths inicializace
  8. konečné načtení Drupalu

Během zaváděcího procesu jsou mimo jiné inicializovány mnohé globální proměnné a načteny funkce, z nichž některé budeme později používat ve svých modulech a zde se o nich v souvislosti s zaváděcím procesem zmíníme.

Proces zavádění probíhá vždy, když dostane Drupal žádost o nějakou stránku, ale nemusí proběhnout celý (může například skončit odmítnutím přístupu nebo načtením stránky z page cache). Výsledkem zaváděcího procesu je načtení mohutného frameworku Drupalu, který je použit pro příjem a zpracování požadavku a ke konečnému vygenerování HTML stránky, která je zaslána návštěvníkovi.

Poznámka: již v souboru bootstrap.inc je definována řada funkcí a proměnných, které budeme později (při psaní modulů) používat, jedná se například o funkce: variable_get, variable_set, drupal_get_filename, drupal_set_message apod.

Inicializace a konfigurace

Za fázi inicializace je odpovědná funkce conf_init, která se nachází v souboru bootstrap.inc. Během procesu dochází k nastavení základních globálních proměnných (base_url, base_path, base_root a dalších). Během tohoto procesu je také parsován soubor settings.php, z něhož jsou vyčteny hodnoty některých globálních proměnných.

Ranná page cache (non-database cache)

Jedná se o cachování, který proběhne ještě před připojením do databáze, tu zde nahrazují soubory. Cachování urychluje běh systému a ve chvíli, kdy se v souborové cache nachází právě požadovaná stránka, odpadá nutnost jejího vytváření (a tím i mnoho dotazů do databáze).

Inicializace databázové vrstvy

Během tohoto procesu jsou nejprve načteny funkce ze souboru database.inc, kde se nachází všechny funkce, které souvisejí s prací s databází: db_query, db_set_active apod. Následně dojde k připojení do databáze voláním funkce db_set_active. Funkce db_set_active se nachází v souboru database.inc.

Tip: Referenci k databázové vrstvě (přesněji bychom měli psát Database abstraction layer) naleznete na adrese http://api.drupal.org/api/group/database/6.

Identifikace uživatele a případné odmítnutí přístupu

Během procesu dojde k rozhodnutí o tom, zda uživatel má do systému přístup. K rozhodnutí o zamítnutí přístupu dojde prostřednictvím voláním funkce drupal_is_denied, která se nachází v souboru bootstrap.inc a obsahuje jeden SELECT dotaz do databáze.

Session

Drupal používá sessions. Během fáze, kdy dochází k inicializaci sessions je načten soubor session.inc (obsahuje funkce které se sessions souvisí) a volána funkce session_start.

Pokud je vám cizí vlastní pojem session a rádi byste se dozvěděli více, doporučuji například články Začínáme používat sessions v PHP a Pracujeme se session v PHP.

Pozdní page cache

Jedná se o page cache, který probíhá po připojení k databázi a data (konkrétní stránky nebo jejich části) jsou také z databáze vyčítána.

Paths inicializace

Je načten soubor path.inc a volána funkce drupal_init_path. Funkce drupal_init_path inicializuje proměnnou $_GET['q'], ke které se později vrátíme (budeme s ní v modulech pracovat).

Dokončení procesu

Je načten soubor common.inc, v němž se nacházejí mnohé další základní funkce, a dále je volána funkce _drupal_bootstrap_full (která se nachází v právě načteném souboru common.inc). V této funkci jsou načteny další soubory: theme.inc, pager.inc, menu.inc a další. Dále je voláno několik inicializačních funkcí, z nichž je pro nás nejzajímavější funkce module_load_all (funkce je definována v souboru module.inc), která načte všechny aktivní moduly. Funkce module_load_all je velice jednoduchá, pouze volá dvě daší funkce:

function module_load_all() {
  foreach (module_list(TRUE, FALSE) as $module) {
    drupal_load('module', $module);
  }
}

Funkce module_list se také nachází v souboru module.inc a vrací seznam aktivních modulů. Funkce drupal_load je definována v souboru bootstrap.inc a slouží k načtení souboru, jehož název je předán parametrem. Zaváděcí proces zakončuje druhý programový řádek v souboru index.php:

drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

Theming

Po zavedení systému je Drupal připraven přejít do další fáze, kde již zpracovává konkrétní request. Konkrétním požadavkem může být například URL http://www.vasesite.cz/q=node/123. Generování dat, která se mají zobrazit, začíná načtením menu (funkce menu_execute_active_handler) a následuje theming (funce theme) a připojení patičky (funkce drupal_page_footer) - výsledkem procesu je HTML stránka, která je zaslána uživateli jako odpověď na jeho požadavek.

Za tento proces je odpovědný zbytek souboru index.php:

$return = menu_execute_active_handler();
// Menu status constants are integers; page content is a string.
if (is_int($return)) {
  switch ($return) {
    case MENU_NOT_FOUND:
      drupal_not_found();
      break;
    case MENU_ACCESS_DENIED:
      drupal_access_denied();
      break;
    case MENU_SITE_OFFLINE:
      drupal_site_offline();
      break;
  }
}
elseif (isset($return)) {
  // Print any value (including an empty string) except NULL or undefined:
  print theme('page', $return);
}
drupal_page_footer();

Závěr

Nahlédli jsme hlouběji do systému a měli bychom mít základní přehled, jak Drupal pracuje. Na znalosti z tohoto i předcházejícího dílu seriálu prakticky navážeme v dílu následujícím, v němž se orientačně seznámíme s databází Drupalu a začneme vývoj prvního modulu: hlasování pro článek.


Reklama


Další aktuální články na interval.cz

Tematicky související články

Dejte vědět i ostatním o článku

Komentáře ke článku

Přidat nový komentář

Ivan Jaroš

Autor komentáře: Ivan Jaroš

Datum vložení: 06. Listopad 2009, 22:20:47

"Častou začátečnickou chybou je nahrát modul přímo do adresáře sites/all/"

Omnoho castejsiou a väcsou chybou je umiestnovanie modulov a tem do korenovych adresarov /modules a /themes.

anonym

Autor komentáře: anonym

Datum vložení: 25. Listopad 2009, 18:46:50

nejak ten zajimave vypadajici serial umrel :(

Jan Sova

Autor komentáře: Jan Sova

Datum vložení: 25. Listopad 2009, 21:55:04

Nezemrel! Nebojte, jsou jiz pripraveny k publikovani dalsi dva dily a pokud bude zajem ctenaru, pokracujeme dal (vlastne jiz pisi dalsi tri).

Honza Sova

Miroslav Kučera

Autor komentáře: Miroslav Kučera

Datum vložení: 25. Listopad 2009, 22:11:23

Potvrzuji, neumrel :-) Zitra vyjde dalsi dil.

Zpět na začátek komentářů | Zpět na začátek článku

Přidat nový komentář

Jméno a e-mail jsou nepovinné. Příspěvky obsahující odkaz jsou moderovány.

Zoner AntiVirus Free pro Android
zabezpečte si svůj smartphone, zdarma
Profesionální eshop Zoner inShop od 990 Kč.
Reklama
Reklama

Syndikace

hledáme nové autory | redakce interval.cz | reklama na interval.cz

© ZONER software, a.s., všechna práva vyhrazena, interval.cz dodržuje právní předpisy o ochraně osobních údajů. Powered by WordPress.