Che succede 'sotto il cofano' di Drupal per visualizzare una pagina web?

Stato documento: Alfa

Drupal tecnicamente usa il Front Controller Pattern [Edit: link in italiano?], cioè tutte le richieste passano per un punto centrale - index.php. E' anche uno degli file PHP più piccoli di Drupal (perchè delega il lavoro all'infrastruttura), ma segue tre operazioni importanti:

  1. Inizializzazione: Caricamento (bootstrapping) del minimo codice necessario per completare il processo
  2. Temizzare il contenuto: Conversione (theming) del contenuto salvato nel db in un documento parziale di HTML
  3. Temizzaze la pagina: Conversione (theming) del resto della pagina (HTML completo, blocchi e contenuto)

Vedi anche I componenti della pagina web.

Bootstrapping.
Il bootstrapping (inizializzazione) e' uno dei compiti più importanti nel sistema, dove Drupal tenta di caricare la minima quantità di codice possibile per completare l'operazione richiesta. Il codice di bootstrapping si trova in includes/bootstrap.inc. Questo processo segue delle fasi distinte:

  1. Configurazione: Carica codice contenente la configurazione specificata nel file settings.php.
  2. Caching immediato: Sostituendo (nella configurazione) il normale immagazzinamento delle pagine (caching) è possibile restituire pagine già costruite precedentemente, con un minimo costo di tempo di elaborazione, utilizzando strumenti al di fuori di Drupal. Se la pagina viene trovata, l'esecuzione di Drupal termina qui.
  3. Database: Carica codice per comunicare con il database, compreso la connessione ad esso.
  4. Accesso: Carica codice per controllare se l'utente (o meglio il host o suo IP) può accedere alla pagina.
  5. Sessione: Carica codice per gestire la sessione dell'utente (usando un cookie). Simile per caching immediato, il codice 'standard' di Drupal può essere sostituito in modo di farlo funzionare con un sistema di load balancing, per esempio. L'oggetto $user viene creato durante questa fase.
  6. Caching normale: Carica codice per controllare l'immagazzinamento della pagina (caching). Drupal ha vari meccanismi per salvare pagine, o pezzi di esse, sempre per ridurre il costo in tempo di elaborazione. Se la pagine vengono trovate, l'esecuzione di Drupal termina qui, altrimenti codice per tutti gli moduli aggiunti abilitati viene caricato.
  7. Linguaggio: Carica codice (anche per siti non multi-lingua) per calcolare la lingua preferita dell'utente.
  8. Percorso: Carica codice per convertire il percorso ricevuto in uno 'normalizzato', per esempio da /drupal/projects a node/123. Vedi anche Il sistema di menù - dal URI alla pagina web, per ulteriori dettagli.
  9. Completo: Carica codice rimanente per completare l'operazione. Chiama il hook_init di ogni modulo abilitato che ha fornito questo hook.

Dopo il bootstrap, Drupal converte il percorso ricevuto in una funzione da chiamare tramite il menu router. Questa funzione è conosciuto come 'gestore' (handler).

Temizzare il contenuto.
Il gestore (handler) ha il compito di caricare i dati del contenuto e convertirlo in un documento parziale di HTML. Prima di procedere con quest'operazione però, il gestore controlla se l'utente ha i necessarie permessi per vedere il contenuto, e se effettivamente i dati esistono - questo può succedere se un nodo viene cancellato, per esempio. In entrambi i casi non sarà possibile temizzare un contenuto, o perchè non è permesso, o perchè non c'è. In questi casi viene restituito il codice di errore HTTP, 403 o 404.
Se i dati vengono trovati, e l'utente ha i necessari permessi per vederli - singolo nodo o lista che sia - ogni uno viene temizzato - cioè convertito in una stringa di testo HTML. Per ogni nodo viene creato i links (tassonomia, numero commenti, leggi tutto, ecc), e per le liste vengono creati dei links del pager - se specificato, che spezzano una lista in sezioni più piccole.

Temizzare la pagina.
Con il contenuto convertito in HTML, questo viene passato alla fase finale di temizzazione che construisce la pagina finale. Vengono caricati i parametri dei blocchi per ogni regione, e se combacia con i parametri di visualizzazione, allora vengono caricato i dati del blocco che poi viene temizzato.
Ma se la precedente fase (temizzare il contenuto) ha ritornato un codice di errore, allora Drupal taglia corto, evitando di temizzare i blocchi.

Sito in manutenzione
Quando il sito è in manutenzione (maintenance mode on) Drupal visualizza una pagina 'tagliata' come per i precedenti errori, ma con il codice 503 - servizio non disponibile. Con un eccezione - se stai tentando di accedere al sito (log in) o se sei l'utente 'omnipotente' cioè uid == 1, anche conosciuto come 'admin'.

Nota tecnica
Drupal non usa il pattern Model-View-Controller, bensi il pattern Presentation-Abstraction-Control. [Edit: link in italiano?] Questo ha anche il significato che non c'è un netto distinzione fra view e modello - c'è la tendenza di produrre il risultato HTML (cioè view) durante la fase di costruzione del model. Per esempio in una lista di nodi, ogni nodo viene prima caricato poi temizzato, invece di caricare tutti i nodi per poi temizzarli. Quindi troviamo funzioni e template per temizzare 'node', ma non 'nodes' o 'list'.

Argomenti: