Vou tentar responder à sua pergunta inicial - como usar a diretiva com condição. Para depuração, eu uso o xDebug. E, na minha opinião, é muito difícil depurar e-mails. Nesse caso, mostro um exemplo com a mesma estrutura em outra parte do magento.
Em vendas / pedido / exibição, existe a mesma estrutura. A estrutura de saída do endereço determinada em Mage/Core/etc/config.xml
pol default/customer/address_templates/text
.
Nossa tarefa será adicionar qualquer condição para mostrar ou não o 'nome da empresa'. Diretivas como var , dependem , se analisadas no filtro deVarien_Filter_Template
método ($ value) . Nesse método, existe a iteração de todas as construções $ (se / dependem / var) e todas as construções $ usadas nesta chamada:
$replacedValue = call_user_func($callback, $construction);
Para cada if / depende / var, existe seu próprio método. Vamos olhar parapublic function ifDirective($construction)
public function ifDirective($construction)
{
if (count($this->_templateVars) == 0) {
return $construction[0];
}
if($this->_getVariable($construction[1], '') == '') {
if (isset($construction[3]) && isset($construction[4])) {
return $construction[4];
}
return '';
} else {
return $construction[2];
}
}
Agora vamos ver o método protegido _getVariable. Gostaria de chamar sua atenção em uma linha:
} elseif (isset($stackVars[$i-1]['variable']) && $stackVars[$i-1]['variable'] instanceof Varien_Object) {
e veja o comentário abaixo:
// If object calling methods or getting properties
Portanto, para condicionar nosso $ stackVars deve ser um objeto e uma instância de Varien_Object (a maioria dos modelos se estende de Mage_Core_Model_Abstract, que se estende de Varien_Object). Vamos subir alguns degraus acima. Precisamos adicionar a stackVars e object.
No meu exemplo da classe Mage_Customer_Block_Address_Renderer_Default, o magento chama o método filter ($ value), que mencionei acima.
Aqui eu forneço uma solução. Atenção! Esta solução não é muito limpa. É objetivo mostrar o comportamento do magento. Por favor, reescreva a si mesmo.
public function render(Mage_Customer_Model_Address_Abstract $address, $format=null)
{
//parsing $data array
$formater->setVariables($data);
$format = !is_null($format) ? $format : $this->getFormat($address);
return $formater->filter($format);
}
Neste método, adicionaremos um objeto de pedido ao $ data array. De acordo com a minha tarefa, vamos adicionar um objeto de ordem a essa matriz. Faça isso antes de '$ formater-> setVariables ($ data);'
$data['order_object'] = $address->getOrder();
Após este magento irá analisar este objeto e chamar qualquer método. Por exemplo, adicionamos o novo método getPaymentOutput (). Coloque funcionalidade simples na classe Order:
public function isPrinted()
{
if ($this->getPayment()->getMethod() == 'checkmo') {
return true;
} else {
return false;
}
}
e somente depois disso fazemos alterações na diretiva xml com isso:
{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}