Como funciona a engine de renderização padrão do Drupal 7 PHPTemplate Engine

como são lindas essas pequenas curiosidades do código open source!

No Drupal 7, temos a famosa PHPTemplate Engine para renderização dos templates.

Na verdade, a função theme() permite que se sobrescreva a engine de renderização de template.

Porém, por padrão, é usada essa função theme_render_template():

1
2
3
4
5
6
7
8
9
10
11
12
13
function theme_render_template($template_file, $variables) {
  // Extract the variables to a local namespace
  extract($variables, EXTR_SKIP);
 
  // Start output buffering
  ob_start();
 
  // Include the template file
  include DRUPAL_ROOT . '/' . $template_file;
 
  // End buffering and return its contents
  return ob_get_clean();
}

Basicamente, usamos a função ob_start, para interromper a saída do script PHP e começar a gravar tudo em um buffer. (ob é a abreviação de output buffer, ou seja, buffer de saída e não isto aqui)

Aí, fazemos um include do arquivo de template. Esse include irá simplesmente enviar para a saída o resultado do arquivo de template, já substituindo as variáveis locais extraídas pela função extract.

A função finaliza retornando com ob_get_clean, que interrompe o processo de jogar a saída no buffer e retorna tudo o que foi gerado para uma string.

Antes de encerrar o post curto, queria apenas mostrar o que é possível fazer com a função extract:

1
2
3
4
5
6
7
$var_array = array ("cor" => "azul",
                    "tamanho"  => "medio",
                    "forma" => "esfera");
 
extract ($var_array);
 
echo "$cor, $tamanho, $forma, n";

Ou seja, as variáveis $cor, $tamanho e $forma aparecem como variáveis locais após o uso da função extract!