raelgc / template

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

Valor incorreto em blocos #15

Closed Valkhan closed 8 years ago

Valkhan commented 8 years ago

Pelo que percebi quando estamos trabalhando com laço FOR e por ventura um valor que foi informado em um LOOP anterior e não foi modificado no LOOP atual, este valor em 'cache' vai ser exibido, verifiquei que neste Issue #3 houve problema similar, porém a solução proposta lá não me resolveu (talvez por conta da versão da classe), segue exemplo abaixo:

HTML:

<table>
<!-- BEGIN TESTE -->
<tr>
    <td>{VALOR1}</td>
    <td>{VALOR2}</td>
    <td>{VALOR3}</td>
</tr>
<!-- END TESTE -->
</table>

PHP:

$t = new Template(__DIR__.'/temp.html');
$dados = array(
    array('valor1' => '1a','valor2' => '2a','valor3' => '3a'),
    array('valor1' => '1b','valor2' => '2b','valor3' => '3b'),
    array('valor1' => '1c','valor2' => '2c','valor3' => '3c')
    );
for($x = 0;$x<3;++$x){
    if($x % 2 === 0){
        $t->VALOR1 = $dados[$x]['valor1'];
        $t->VALOR2 = $dados[$x]['valor2'];
        $t->VALOR3 = $dados[$x]['valor3'];
    }else{
        $t->VALOR1 = $dados[$x]['valor1'];
        $t->VALOR3 = $dados[$x]['valor3'];
    }
    $t->block('TESTE');
}
$t->show();

Vai produzir o seguinte resultado:

1a | 2a | 3a 1b | 2a | 3b 1c | 2c | 3c

Onde acredito que o correto seria:

1a | 2a | 3a 1b | | 3b 1c | 2c | 3c

Uma alternativa é zerar o valor que não foi utilizado, mas minha dúvida é, teria como ao adicionar um 'bloco' ele zerar os valores atuais das variáveis modificadas assim evitando a necessidade de informar um valor 'branco' nas variáveis não utilizadas?

raelgc commented 8 years ago

@Valkhan Pra solução do issue #3 funcionar, você precisa explicitamente chamar o segundo parâmetro com o valor false para $append:

$tpl->block('BLOCO', false);

Isso fará com que o valor atual do bloco não seja adicionado ao valor anterior (ele virá "limpo").

Vou fazer um Pull Request e adicionar essa funcionalidade a classe atual.

Valkhan commented 8 years ago

Sim, eu fiz isso, mas não atualizei no exemplo acima (sorry), o detalhe é que quando coloco 'false' o bloco simplesmente não funciona e não gera mensagem de erro, não cheguei a debugar nem analisar a fundo, fiz o copy/paste da função alterada e fiz o teste conforme orientado.

raelgc commented 8 years ago

Certo, obrigado por testar.

Eu vou aplicar na classe atual e testar.

raelgc commented 8 years ago

@Valkhan Eu atualizei a classe com o método block e o parâmetro $append. Testei aqui e funcionou como o esperado (desde que passe o valor false pra $append.