Utente: Anonymous

Avvio di Drupal

Quando un browser invia un URL a Drupal per richiedere una pagina , la prima azione che viene eseguita dal sistema è la lettura del codice php nel file index.php.
Nel file, riportato a fondo pagina, sono definite le quattro fasi distinte che Drupal esegue per portare a termine la visualizzazione della pagina richiesta.

  • inizializzazione o bootstrap del sistema - drupal_bootstrap()
  • lettura del contenuto dei nodi - menu_execute_active_handler()
  • lettura del contenuto dei blocchi e visualizzazione della pagina - theme('page',$return)
  • chiusura - drupal_page_footer()

Bootstrap

Il sistema chiama la funzione drupal_bootstrap() che inizializza tutte le variabili di sistema , carica i moduli attivi , si connette al database, converte l'url alias ed altro ancora, predisponendo l'ambiente alla lettura e codifica dei contenuti.

Lettura del contenuto primario (nodi)

Il sistema chiama la funzione menu_execute_active_handler() che legge e codifica il contenuto richiesto, tornando una stringa contenente il codice HTML da visualizzare. In questa fase Drupal individua, in base al path ricevuto, la page callback, che consente di estrarre il contenuto della pagina.
Ad esempio per un nodo generico la page callback è la node_page_view().

In pratica viene preparato tutto tranne le barre, l'intestazione, il piè di pagina.
Per un esempio di quello che Drupal genera in questa fase, aprire il file index.php
e aggiungere le due righe indicate sotto la funzione menu_execute_active_handler().

......
$return = menu_execute_active_handler();
print $return;
exit();
....

Richiamando ora la home page del sito si vedrà il solo contenuto della pagina senza barre laterali, intestazione e fondo pagina. Questo perchè $return contiene il codice HTML del contenuto ed è quello che viene stampato con l'istruzione print $return.
E' da notare che al risultato non sono applicati gli stili del tema corrente, poichè il tema, e quindi lo stile, non è ancora stato completamente applicato cosa che viene fatta successivamente chiamando la funzione theme('page',$return).

Lettura del contenuto secondario (blocchi, menu)

Il sistema chiama la funzione theme('page') che legge e codifica il contenuto secondario unendolo al primario. Il risultato ottenuto è inviato al browser mediante l'istruzione "print".
Anche qui è possibile isolare il risultato ottenuto sostituendo il parametro $return con una stringa vuota, come in esempio:

......
  $return=""; // annulla $return
  print theme('page', $return);
}
...

Richiamando ora la home page del sito si vedrà il solo contenuto secondario, intestazione, blocchi, menu ma senza il contenuto primario definito in $return.

Chiusura

Il sistema chiama la funzione drupal_page_footer(). Nelle fasi precedenti sono state avviate tutte le funzioni per preparare i contenuti. In questa fase Drupal chiama tutte le funzioni hook_exit() implementate nei moduli attivi, per avvisare che la pagina richiesta è stata inviata e che le operazioni da attivare sono terminate.
Queste funzioni possono essere utili per eseguire un debugging del sistema o aggiornare, in fase di chiusura, alcune tabelle associate ai moduli.

Contenuto del file index.php.

<?php
require_once './includes/bootstrap.inc';

drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

/*
Con questa funzione viene generato
il solo contenuto dei nodi e, al ritorno, nella variabile $return
è presente il codice HTML del contenuto dei nodi.
*/

$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:
/*
Con questa funzione viene generato il  contenuto dei blocchi ,
assemblato insieme al precedente contenuto dei nodi
e visualizzato sul web
*/
 
print theme('page', $return);
}
/*
* Preparazione della parte finale della pagina
*/
drupal_page_footer();
?>

Riporto di seguito la descrizione maggiormente dettagliata di quel che succede nelle quattro fasi suddette.