Gneccao Postado Dezembro 9, 2011 Denunciar Share Postado Dezembro 9, 2011 Boa Noite, estou tentando fazer um sistema de Template, mas não estou conseguindo fazer com que ele ignore as tags <?php e apenas modifique as tags {@}com isso ele pega todo o conteudo dentro das tags <?php e transformar em html.alguém poderia me ajudar???public function setVariable($name, $value) { $this->_variables["names"][] = "/{@" . $name . "}/"; $this->_variables["values"][] = $value; } private function setVariables($content) { return preg_replace($this->_variables["names"], $this->_variables["values"], $content); } public function build() { $final = $this->setVariables($this->_content); $final = $this->setVariables($final); // segundo passe return $final; }as funcoes que utilizo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Willian Gustavo Veiga Postado Dezembro 9, 2011 Denunciar Share Postado Dezembro 9, 2011 Você poderia mostrar um exemplo de um template?Um abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gneccao Postado Dezembro 9, 2011 Autor Denunciar Share Postado Dezembro 9, 2011 <title>{@TITULO}</title>$pagina->setVariable("TITULO", "Titulo da Paginaa"); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Willian Gustavo Veiga Postado Dezembro 11, 2011 Denunciar Share Postado Dezembro 11, 2011 E uma view que dá problema? Como seria? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gneccao Postado Dezembro 12, 2011 Autor Denunciar Share Postado Dezembro 12, 2011 <?php echo $func->registrar($_POST['senha'],$_POST['senha2'],$_POST['email'],$_POST['email2'],$_POST['nome'],$_POST['id'],$_POST['id2'], $_POST['perg'],$_POST['resp'],$_POST['codigo'],@$_POST['bonus'],$_POST['indicado'],$_POST['account']); } ?> essa é a funcaoso q no site apareceregistrar($_POST['senha'],$_POST['senha2'],$_POST['email'],$_POST['email2'],$_POST['nome'],$_POST['id'],$_POST['id2'], $_POST['perg'],$_POST['resp'],$_POST['codigo'],@$_POST['bonus'],$_POST['indicado'],$_POST['account']); } ?> apenas isso, toda tag <?php, ele ignora e n verifica ela, apenas mostra o conteudo, como se fosse html Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Willian Gustavo Veiga Postado Dezembro 12, 2011 Denunciar Share Postado Dezembro 12, 2011 Parece que o problema é o seguinte:- Você obtém o conteúdo do arquivo ($content).- Faz o replace das variáveis.- Imprime (echo, print ...) o resultado do replace.Quando você imprime código PHP ele não é executado.Entendeu? Espero ter sido claro.Um abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gl3d50N Postado Dezembro 13, 2011 Denunciar Share Postado Dezembro 13, 2011 Taí... uma coisa bacana que gostaria de aprender... Templates...até eu gostaria da solução agora, rss!!! :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gneccao Postado Dezembro 13, 2011 Autor Denunciar Share Postado Dezembro 13, 2011 Sim, esse é o problema. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Willian Gustavo Veiga Postado Dezembro 13, 2011 Denunciar Share Postado Dezembro 13, 2011 Não use eval, pelo amor de Deus :)Vou escrever um exemplo simples (ou pesquisar) assim que der tempo.Um abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Willian Gustavo Veiga Postado Dezembro 14, 2011 Denunciar Share Postado Dezembro 14, 2011 Escrevi um exemplo simples. Não utilize em produção já que não foi testado devidamente. Se você usar a responsabilidade é toda sua :)View.php<?php class View { private $_fileName; private $_data; public function __construct($fileName) { $this->_data = array(); if (!file_exists($fileName)) { throw new View_Exception('File not found'); } if (!is_readable($fileName)) { throw new View_Exception('Could not read view file'); } $this->_fileName = $fileName; } public function __set($variable, $value) { $this->_data[$variable] = $value; } public function render() { extract($this->_data); ob_start(); require $this->_fileName; $output = ob_get_contents(); ob_end_clean(); return $output; } public function __toString() { return $this->render(); } } View_Exception.php <?php class View_Exception extends Exception {} template.tpl: <h1><?php echo $titulo; ?></h1> <p>Bem vindo ao meu site</p> <p>Meu nome é <?php echo $desenvolvedor->nome ?></p> Código que usa o template: <?php require_once 'View.php'; require_once 'View_Exception.php'; $desenvolvedor = new StdClass(); $desenvolvedor->nome = 'John Doe'; $view = new View('template.tpl'); $view->titulo = 'Meu site pessoal'; $view->desenvolvedor = $desenvolvedor; echo $view; // Ou $view->render(), tanto faz ...O código pode ser melhorado, mas já dá para ter uma ideia de como resolver o seu problema. A classe View deveria ter apenas uma responsabilidade. Ela não deveria verificar se um arquivo existe ou se é possível ler o arquivo ...Se tiver dúvidas poste novamente.Um abraço. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Gneccao Postado Dezembro 15, 2011 Autor Denunciar Share Postado Dezembro 15, 2011 eu acabei usando um outro metodo, funciona mas não é muito bom, mas no momento ta funcionandoobrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Gneccao
Boa Noite, estou tentando fazer um sistema de Template, mas não estou conseguindo fazer com que ele ignore as tags <?php e apenas modifique as tags {@}
com isso ele pega todo o conteudo dentro das tags <?php e transformar em html.
alguém poderia me ajudar???
public function setVariable($name, $value)
{
$this->_variables["names"][] = "/{@" . $name . "}/";
$this->_variables["values"][] = $value;
}
private function setVariables($content)
{
return preg_replace($this->_variables["names"], $this->_variables["values"], $content);
}
public function build()
{
$final = $this->setVariables($this->_content);
$final = $this->setVariables($final); // segundo passe
return $final;
}
as funcoes que utilizo
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.