Delphi 4 PHP – Smarty Templates
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

2 Comments
Como vai cesar?
O erro que vc encontrou é semelhante ao abaixo?
Foi no servidor web?
Fatal error: Smarty error: the $compile_dir ‘/tmp’ does not exist, or is not a directory. in /home/a56576/public_html/rascunho/07/02/vcl/smarty/libs/Smarty.class.php on line 1092
grato!
@Bruno:
Sim foi este erro mesmo.