Closed maiserjose closed 9 years ago
@maiseralves, testa esse método block
abaixo, substituindo o atual:
/**
* Show a block.
*
* This method must be called when a block must be showed.
* Otherwise, the block will not appear in the resultant
* content.
*
* @param string $block the block name to be parsed
* @param boolean $append true if the content must be appended
*/
public function block($block, $append = true) {
if(!in_array($block, $this->blocks)) throw new \InvalidArgumentException("block $block does not exist");
// Checking finally blocks inside this block
if(isset($this->parents[$block])) foreach($this->parents[$block] as $child){
if(isset($this->finally[$child]) && !in_array($child, $this->parsed)){
$this->setValue($child.'_value', $this->subst($this->finally[$child]));
$this->parsed[] = $block;
}
}
if ($append) {
$this->setValue($block.'_value', $this->getVar($block.'_value') . $this->subst($this->getVar($block)));
} else {
$this->setValue($block.'_value', $this->getVar($block.'_value'));
}
if(!in_array($block, $this->parsed)) $this->parsed[] = $block;
// Cleaning children
if(isset($this->parents[$block])) foreach($this->parents[$block] as $child) $this->clear($child.'_value');
}
A diferença pro atual: quando você quiser que o bloco não mantenha o valor, usa:
$tpl->block('BLOCO', false);
Senão usa da maneira tradicional:
$tpl->block('BLOCO');
Depois me diga se funcionou pra eu poder fechar o issue ou arrumar os defeitos :)
Olá Rael, está funcionando!
Ótimo trabalho!
Para fins de esclarecimento a resolução para o exemplo acima com a sua solução (melhor impossível), ficaria assim:
$tpl = new Template("modelo.html");
$get = filter_input(INPUT_GET, 'opcao');
if( ! empty($get) ){
$reset = true;
}else{
$reset = false;
}
$tpl->VAR_CONTEUDO = "Algum conteúdo";
$tpl->block("BLK_BLOCO", ! $reset);
if($get == "1"){
$tpl->VAR_CONTEUDO = "Conteúdo 1";
$tpl->block("BLK_BLOCO");
}
else if($get == "2"){
$tpl->VAR_CONTEUDO = "Conteúdo 2";
$tpl->block("BLK_BLOCO");
}
$tpl->show();
Obrigado Rael!
Situação: O arquivo PHP que usa o bloco template, faz o parse do bloco toda vez que é chamado.
Objetivo: Dependendo da situação é necessário "resetar" o bloco, ou seja, desfazer o parse feito quando o arquivo é chamado. E realizar um novo parse no mesmo bloco.
Exemplo:
Arquivo "modelo.html":
Arquivo "modelo.php":