Ir para conteúdo

Arquivado

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

TheNight

Sistema de templates PHP

Recommended Posts

Olha e aqui de novo :assobiando: Vocês vão cansar de me ver aqui pedindo ajuda HEUHUEHE.

 

Estou tendo uma certa dificuldade com meu sistema de Templates. (Créditos do Érick Master, peguei como base o sistema dele).

 

Bom este é meu código:

 

<?php


class Template {


    private $TPL_File = NULL;
    private $Read_File = NULL;
    private $Tags = array();
    private $Tags_Count = 0;
    private static $_instance;


    public static function getInstance() {
        if (!isset($_instance)) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }


    public function Load($TPL_File) {
        $this->TPL_File = @fopen($TPL_File, "r");
        if ($this->TPL_File == FALSE) {
            exit("<span style=\"border:1px dashed #c00; color:#c00; padding:6px; background-color:#ffebe8;\">Error: Arquivo <strong>" . $TPL_File . "</strong> não Encontrado.</span>");
        }
        $this->Read_File = @fread($this->TPL_File, @filesize($TPL_File));
        if ($this->Read_File == FALSE) {
            exit("<span style=\"border:1px dashed #c00; color:#c00; padding:6px; background-color:#ffebe8;\">Error: Erro na leitura do Arquivo <strong>" . $TPL_File . "</strong></span>");
        }
    }


    public function Set($Tag, $Value) {
        $this->Tags[$this->Tags_Count++] = array(
            "Name" => $Tag,
            "Value" => $Value
        );
    }


    public function Show() {
        global $version;
        foreach ($this->Tags as $TPL_Tags) {
            $this->Read_File = str_replace("{" . $TPL_Tags["Name"] . "}", $TPL_Tags["Value"], $this->Read_File);
        }


        eval("?>" . $this->Read_File . "<?");
    }


    public function TPL_Modules() {
        if (isset($_COOKIE["Web_Template"]) == FALSE) {
            $Template = constant("THEME_DEFAULT");
        } elseif (file_exists("themes/" . pack("H*", $_COOKIE["Web_Template"]) . "/index.tpl.php") == FALSE) {
            setcookie("Web_Template", NULL);
            $Template = constant("THEME_DEFAULT");
            echo("<script>window.alert('Template Invalido, aguarde...'); window.location='?';</script>");
        } else {
            $Template = pack("H*", $_COOKIE["Web_Template"]);
        }
        $this->Set("Template_Dir", $Template);
        $this->Load("themes/" . $Template . "/index.tpl.php");


        if (filter_input(INPUT_GET, "tpl") == TRUE) {
            $Set_Template = pack("H*", $_GET["tpl"]);


            if ($Set_Template == "TPL_Default") {
                setcookie("Web_Template", NULL);
                echo("<script>window.location='?';</script>");
            } elseif (file_exists("templates/" . $Set_Template . "/index.tpl.php") == FALSE) {
                setcookie("Web_Template", NULL);
                echo("<script>window.alert('Template Invalido, aguarde...'); window.location='?';</script>");
            } else {
                setcookie("Web_Template", bin2hex($Set_Template), time() + (1 * 24 * 60 * 60));
                exit("<script>window.location='?';</script>");
            }
        }
    }


    public function Open() {
        if (isset($_COOKIE["Web_Template"]) == FALSE) {
            return constant("THEME_DEFAULT");
        } else {
            return pack("H*", $_COOKIE["Web_Template"]);
        }
    }


}

Ele está funcionando perfeitamente, meu template é aberto como eu quero, porém estou com dificuldade de abrir as páginas com esse sistema, fiz uma outra classe General.class.php :

 

<?php


class General {


    public function __construct() {
        global $Template;


        $Template->Set('%title_web%', WEB_TITLE);
        $Template->Set('%main_content%', $this->getPages());
        var_dump($Template);
    }


    public function getPages() {
        global $Template;
        switch (filter_input(INPUT_GET, 'pages')) {
            case 'home':
                $Template->Load("themes/" . $Template->Open() . "/pages/home.page.php");
                break;
            default :
                $Template->Load("themes/" . $Template->Open() . "/pages/home.page.php");
                break;
        }
    }


}

Só que não está abrindo, quando dou um var_dump na minha variável de objeto $Template recebo isso:

 

3FgskHO.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use global.

 

Seu getInstance não faz sentindo algum! Não use algo que você não entenda totalmente.

 

Mantenha-se sempre SIMPLES.

 

 
private $template;
public function __construct() {
         $this->template = new Template(); // aqui.


        $this->template ->Set('%title_web%', WEB_TITLE);
         $this->template ->Set('%main_content%', $this->getPages());
        var_dump( $this->template );
    }
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim é que não tive lógica (não sabia por onde começar) pra montar o sistema de template, e fiz uma cópia cabulosa, mas depois eu fui me ajeitando, e retirei o uso do global, porém ainda não consegui resolver...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu getPages() não retorna nada!

 

Vc precisa retornar algo na sua function. para que possa passar para o array

 

 
  public function getPages() {
  
        switch (filter_input(INPUT_GET, 'pages')) {
            case 'home':
 
//retorno uma string com HTML da pagina. ou use return include.
              return file_get_contents($this->template->Load("themes/" . $Template->Open() . "/pages/home.page.php") );
            default :
               return "Sou um get!! Preciso retornar, para que possa ser pego meu valor, esse é meu único objetivo ;)";
        }
    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pesquise por Router e Dispatcher, muito mais fácil criar roteamento de paginas e carregar suas Templates, css, js...

 

Na Dispatcher você controla qual diretório é! e carrega a template, por exemplo Home do Site, Admin, etc

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.