O D4PHP tem suporte nativo a Smarty Templates, que é um recurso muito interessante, que aumenta a produtividade ao mesmo tempo que ajuda a separar a lógica do design.

O problema que eu encontrei, é que a forma em que foi implementado, depende que o PHP esteja com variáveis globais habilitadas, como eu mantenho este recurso desabilitado, quando tentava usar Smarty Templates com D4PHP, sempre dava erro, e a mensagem de erro não ajudava muito.

Este erro só acontece se no PHP as variáveis globais estiverem desabilitadas.

Com uma dica do Jonathan Benedicto, fiz uma pequena alteração no arquivo “vcl/smartytemplate.inc.php”, para que o diretório temporário fosse carregado do ambiente e não da variável global “TMP”.

A alteração fica na function initialize(), eu comentei o código anterior e adicionei o novo, linha ~51:

function initialize(){
	require_once("smarty/libs/Smarty.class.php");
	$this->_smarty = new Smarty;
	$this->_smarty->left_delimiter='{%';
	$this->_smarty->right_delimiter='%}';
	$this->_smarty->template_dir = '';    

	if ( preg_match( "/^WIN/i", PHP_OS ) ){
/* 	// inicio do código comentado
		if ( isset( $_ENV['TMP'] ) ){
			$this->_smarty->compile_dir = $_ENV['TMP'];
		}
		elseif( isset( $_ENV['TEMP'] ) ){
			$this->_smarty->compile_dir = $_ENV['TEMP'];
		}
		else {
			$this->_smarty->compile_dir = '/tmp';
		}
	}
	else{
		$this->_smarty->compile_dir = '/tmp';
	}
*/ // fim do código comentado      

		if (getenv('TMP')){
			$this->_smarty->compile_dir = getenv( 'TMP' );
		}
		elseif(getenv('TEMP')){
			$this->_smarty->compile_dir = getenv( 'TEMP' );
		}
		else {
			$this->_smarty->compile_dir = '/tmp';
		}
	}
	$this->_smarty->cache_dir=$this->_smarty->compile_dir;
}

Referências

Bookmark and Share: