raelgc / template

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

Remover um Block #8

Closed rafaelkapela closed 9 years ago

rafaelkapela commented 9 years ago

@raelgc É possível remover um bloco setado anteriormente?

Exemplo:

$tpl->block("BLOCO_TESTE");

if(!$_POST[teste]){
     //FUNÇÃO PARA REMOVER O BLOCO_TESTE
}
$tpl->show()
raelgc commented 9 years ago

@rafaelkapela Não na versão atual, mas se você alterar o método block pra algo assim:


        /**
         * 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 $block  false if the block must be cleaned
         */
        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->subst($this->getVar($block)));
            }
            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í você usa normalmente quando quer o block "sujo":

$this->block("MEU_BLOCO");

E quando quer que o bloco seja limpo do conteúdo anterior:

$this->block("MEU_BLOCK", false);

Me diga se funciona.

rafaelkapela commented 9 years ago

Consegui resolver, alterando a linha: $this->setValue($block.'_value', $this->subst($this->getVar($block)));

para: $this->setValue($block . '_value', "");

raelgc commented 9 years ago

Obrigado pelo feedback, @rafaelkapela