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():

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:

$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!