raelgc / template

PHP Template
http://raelcunha.com/template.php
GNU Lesser General Public License v2.1
73 stars 42 forks source link

Varíavel com addFile() #5

Closed rafaelkapela closed 8 years ago

rafaelkapela commented 9 years ago

Quando declaro uma varíavel a ser utilizada no template principal, ela funciona perfeitamente. Porém, quando tento chamar a mesma varíavel dentro de um outro arquivo chamado pelo addFile(), ela não funciona.

Exemplo:

teste.php

$tpl = new Template(main.html");
$tpl->NOME = "Rafael";
$tpl->NOME_2 = "Rafael";
$tpl->addFile("CONTEUDO", "conteudo.html");
$tpl->show();

main.html

{NOME} <-- Funciona
{CONTEUDO} <-- conteudo.html

conteudo.html

{NOME} <-- Não funciona!
{NOME_2} <-- Funciona
raelgc commented 9 years ago

@rafaelkapela, você tem que primeiro declarar os templates, e depois adicionar a variável, se quiser que ela funcione em todos os HTMLs.

rafaelkapela commented 9 years ago

@raelgc, o problema é que na estrutura atual do meu sistema, não dá pra declarar todos os templates antes das variaveis.

Se o usuário entra, por exemplo, na página perfil.php. Este arquivo chamará o _header.php (onde fica os cabeçalhos e o template principal) pra só depois chamar o template perfil.html

Exemplo:

_header.php

$tpl = new Template($dir."_main.html");
$tpl->addFile("MENU", $dir."_menu.html");
$tpl->variavel1 = "ok";

perfil.php

require_once('_header.php');
$tpl->addFile("CONTEUDO", $dir."perfil.html");
$tpl->variavel2 = "ok";
$tpl->show();

Desta maneira a variavel1, nem nenhuma antes do addFile, já não funcionarão...

raelgc commented 9 years ago

Por que não mover $tpl->$tpl->variavel1 = "ok"; pra depois do addFile to perfil.html? Ele sendo adicionado ou não, a variável existe e aí será setada pra ambos.

2015-05-22 13:00 GMT-03:00 rafaelkapela notifications@github.com:

@raelgc https://github.com/raelgc, o problema é que na estrutura atual do meu sistema, não dá pra declarar todos os templates antes das variaveis.

Se o usuário entra, por exemplo, na página perfil.php. Este arquivo chamará o _header.php (onde fica os cabeçalhos e o template principal) pra só depois chamar o template perfil.html Exemplo:

_header.php ´´´ $tpl = new Template($dir."_main.html"); $tpl->addFile("MENU", $dir."_menu.html"); $tpl->variavel1 = "ok"; ´´´

perfil.php ´´´ require_once('_header.php'); $tpl->addFile("CONTEUDO", $dir."perfil.html"); $tpl->variavel2 = "ok"; $tpl->show(); ´´´

Desta maneira a variavel1, nem nenhuma antes do addFile, já não funcionarão...

— Reply to this email directly or view it on GitHub https://github.com/raelgc/template/issues/5#issuecomment-104698205.

Rael Gugelmin Cunha Cel: 16 9-9163-5006 Res: 16 3413-8577 http://www.linkedin.com/in/raelcunha https://twitter.com/rael_gc https://github.com/raelgc https://plus.google.com/+rael_gc http://stackoverflow.com/users/1604312/rael-gugelmin-cunha

rafaelkapela commented 9 years ago

@raelgc Fiz um teste, movendo as varíaveis do _header.php pra penúltima linha, apenas atrás do $tpl->show(); e continuou sem funcionar.

As variáveis funcionam no arquivo principal, mas elas mesmos não funcionam nos arquivos adicionados com addFile...

rafaelkapela commented 9 years ago

Vou tentar mudar um pouco a estrutura dos arquivos, chamando com include ao invés de require, mais tarde posto o resultado...

henriquesousa commented 9 years ago

@raelgc Minhas variaveis não estão sendo impressas quando integro partes do layout: //index.php

<?php
require_once("lib/raelgc/view/Template.php");
use raelgc\view\Template;

$tpl = new Template('layout.html');
$imgslide = array(
        array("diretorio" => "teste", "alt" => "Caminhão - Chassi estendido"),
        array("diretorio" => "teste", "alt" => "Trilhos de aluminio")
    );

$tpl->addFile("HEADER", "partes//header.php");
$tpl->addFile("SLIDE", "partes//slide.php");
foreach($imgslide as $p){
        $tpl->DIRETORIO = $p["diretorio"];
        $tpl->ALT = $p["alt"];
        $tpl->block("BLOCK_DADOS");
    }
$tpl->addFile("SEARCH", "partes//search.php");
$tpl->addFile("FOOTER", "partes//footer.php"); 
$tpl->show();
?>

//slide.php

<!-- BEGIN BLOCK_DADOS -->
                    <div class="slide" style="background-image: url('img/slide/background1.jpeg');">
                        <div class="inner">
                            <div class="container">
                                <div class="banner-wrapper">
                                    <div class="banner">
                                        <div class="before">$480000</div>
                                        Top Cars: Mercedes S Class {DIRETORIO}
                                    </div> <!-- end .banner -->
                                </div> <!-- end .banner-wrapper -->
                                <a href="details.html" class="button border white xsmall">{ALT}</a>
                            </div> <!-- end .container -->
                        </div> <!-- end .inner -->
                    </div> <!-- end .slide -->
                    <!-- END BLOCK_DADOS -->

//layout.html

<!DOCTYPE html>
<html lang="pt_BR">
<head>
<body>

{HEADER}
{SLIDE}
{SEARCH}
{FOOTER}
</body>
</html>
raelgc commented 9 years ago

@rafaelkapela Conseguiu resolver? :)

rafaelkapela commented 9 years ago

@raelgc Consegui sim! Mas já abri um outro issue hehe