Stato documento: Alfa
Spesso la sequenza di temizzazione (rendering) della pagina in Drupal crea confusione. Dopo qualche ore tentando di seguire il codice, ho deciso di tagliare corto, ed installare un pò di codice per creare un X-Ray del processo. Questo dà un pò più informazione di quello disponibile usando Devel e Theme Developer.
Il codice della macchina a raggi X
Ho aggiunto qualche riga di codice in includes/theme.inc
, e giusto che puoi sperimentare per conto proprio, ti spiego le modifiche. Bisogna 'catturare' informazione durante le chiamate a theme()
ed a template_preprocess()
Iniziamo subito, alla riga 577, inserisci:
<?php
function theme() {
$args = func_get_args();
$hook = array_shift($args);
?>
<?php
global $drupal_calls;
if (!isset($drupal_calls)) { $drupal_calls = array(); }
$drupal_calls[] = "theme(start): ". $hook ."\n";
?>
<?php
static $hooks = NULL;
?>
Poi alla riga 694, inserisci:
<?php
// Add final markup to the full page.
if ($hook == 'page' || $hook == 'book_export_html') {
$output = drupal_final_markup($output);
}
?>
<?php
global $drupal_calls;
if (!isset($drupal_calls)) { $drupal_calls = array(); }
$drupal_calls[] = "theme(end): ". $hook .' = '. $output ."\n";
if ($hook == 'page') { foreach ($drupal_calls as $call) { print($call); } }</code></strong><code></strong>
return $output;
}
?>
Ed infine, alla riga 1720, inserisci:
<?php
function template_preprocess(&$variables, $hook) {
global $user;
static $count = array();
?>
<?php
global $drupal_calls;
if (!isset($drupal_calls)) { $drupal_calls = array(); }