Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos_imasters

Class Template

Recommended Posts

Boa tarde pessoal, Estou com uma duvida aqui me matado de tanto eu demora pra programa decidir apreder a criar um sistema de class de template achei uns exemplos na net para eu tenta enteder mais nao dei conta nem de fazelo funciona.. alguem poderia ver se ha algum de errado?

 

index.php

<?php
include"conexao.php";
$t = new template;
$t->SetTemplate("templates/padrao");
$t->Abrir($t->GetTemplate().'/index.tpl.php');
echo $t->build();
?>

template.class.php

<?php 
if(class_exists('template') == False){

class template{
private $conteudo = "";
private $variaveis = array(array());
private $arquivo = "";
private $loop = array();
private $loop2 = array();
private $valor_atual = 0;
private $local = "";
private static $_instance = null;


public static function getInstance(){
if(self::$_instance == null)
self::$_instance = new self;
return self::$_instance;
}
 
public function SetTemplate($var){
$this->local = $var;
}

public function GetTemplate(){
return $this->local;
}

public function setVariable($name, $value){
$this->variaveis["names"][] = "/{@" . $name . "}/";
$this->variaveis["values"][] = $value;
}

private function setVariables($content){
return preg_replace($this->variaveis["names"], $this->variaveis["values"], $content);
}

public function Abrir($content){
if(arquivo_exists($content)){
$this->arquivo = fopen($content,"r");
}else{
exit('Arquivo <b>'.$content.'</b> Não Encontrado');
}
$this->conteudo = @fread($this->arquivo, @arquivosize($content));
if(!$this->conteudo){
exit("Não foi Possivel Abrir ou Ler o Arquivo <b>".$content."</b>");
}    
}

public function Setloop($loopName, $loopVar, $loopValue){
if(!isset($this->loop[$loopName])) 
$this->loop[$loopName] = 0;
$this->loop2[$loopName][$this->loop[$loopName]][$this->valor_atual] = array ("Name" => $loopVar,
"Value" => $loopValue  );                                                      
$this->valor_atual++; 
}    

public function GoNext($loopName){
$this->loop[$loopName]++; 
$this->valor_atual = 0;    
}    

private function Replaceloop($content){
foreach($this->loop2 as $loopName => $loopValue){   
$StringStart = "<loop:".$loopName.">";
$loopStartLen = strlen($StringStart);
$Startloop = strpos($content, $StringStart);
$StringEnd = "</loop:".$loopName.">";
$loopEndLen = strlen($StringEnd);
$Endloop = strpos($content, $StringEnd); 

if($Startloop > 0 && $Endloop > 0){     
$loopData = "";
$Beforeloop = substr($content, 0, $Startloop);
$loopContent = substr($content, $Startloop + $loopStartLen, $Endloop - ($Startloop + $loopEndLen));
$Afterloop = substr($content, $Startloop + $loopStartLen + $loopEndLen + strlen($loopContent) + 1);                 
for($x = 0; $x < count($loopValue); $x ++){   
$tempContent = $loopContent; 
for($i = 0; $i < count($loopValue[$x]); $i++){  
$iResult = 1;      
while ($iResult > 0){
$iTagName = "{@".$loopValue[$x][$i]["Name"]."}";
$iTagVal = $loopValue[$x][$i]["Value"];
$iTagSize = strlen($iTagName);
$iResult = strpos($tempContent, $iTagName);
if ($iResult > 0){
$start = substr($tempContent, 0, $iResult);
$end = substr($tempContent, $iResult + $iTagSize);
$tempContent = $start.$iTagVal.$end;
}
}
}
$loopData .= $tempContent;
}
return  $Beforeloop.$loopData.$Afterloop;  
}  
}
return $content;
}     

public function build(){
$final = $this->setVariables($this->conteudo);
$final = $this->Replaceloop($final);  
$final = $this->Replaceloop($final);
$final = $this->Replaceloop($final);   
eval("?>" . $final);
unset($final);
}
}
}
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

é bem mais complexo que isso..

óbvio dizer, mas é bom lembrar. rsrs

 

Substituir tags é simples demais.

A coisa começa a complicar quando entra na parte funções de controle de fluxo (if, else).

Quando pensar que está ficando complicado, vc notará a necessidade de criar cache das compilações.

 

É quase como criar um compilador de texto.

Se tiver coragem e tempo, vá em frente rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.