Exibir linha no email transacional se a forma de pagamento for

8

Desejo exibir uma linha apenas quando o cliente seleciona a ordem de pagamento da forma de pagamento. Quando um cliente seleciona uma ordem de pagamento como forma de pagamento, desejo exibir uma <li>linha adicional para o email da transação.

Se o cliente selecionar outro método de pagamento, o adicional <li>deverá estar oculto.

Eu tentei esse código, mas isso não funciona:

{{depend order.getPayment().getMethod() == "checkmo"}}
    <li>payment check</li>
{{/depend}}

Como posso conseguir isso?

JGeer
fonte

Respostas:

7

Nesse caso, você pode gerenciar isso pelo manipulador.

Usar manipulador:

Crie o manipulador e defina-o no arquivo de layout:

create a handlere usar esse manipulador processou um arquivo phtml. Ativado local.xmlem app/design/frontend/YOUR_PAackage/YOUR_template/layoutdefinir manipulador.

Código de arquivo de layout como:

    <?xml version="1.0"?>
    <layout version="0.1.0">
<!-- add new handler -->
        <amit_customer_addhan>
            <block type="core/template" name="addNewLi" template="sales/showcheckmo.phtml" />
        </amit_customer_addhan>
    </layout>

Ligue para este manipulador no modelo de email

Então on email html call this handler(locale/YourLANG/template/email/)

{{layout handle="amit_customer_addhan" order=$order}}

código do arquivo phtml:

Em seguida, phtml filecoloque o código comoshow extra li

  <?php if($this->getOrder()->getPayment()->getMethodInstance()->getCode()=='checkmo'):?>
      <li>payment check</li>
     <?php endif;?>

Editar: a localização de phtml fileé: app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

OU: sem chamada do manipulador:

chamar um arquivo de bloco sem manipulador de layout e parâmetro ans para

 {{block type='core/template' area='frontend' template='sales/showcheckmo.phtml' order=$order}}

Neste caso, necessidade definida como mangento areacomo frontendcomo arquivo phtml chamando a partir daqui

Amit Bera
fonte
Oi Amit, onde posso encontrar o arquivo showcheckmo.phtml ou onde preciso criá-lo?
JGeer #
atualizado, por favor verifique
Amit Bera
Tentei, mas isso não funciona. A linha não é exibida dentro do email.
JGeer
Tente colocar algum conteúdo estático em phtml. E CKD o texto vindo ou não
Amit Bera
Não também com conteúdo estático, ele não funciona. O que estou fazendo errado?
JGeer
0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'
eetzen
fonte
Tentei isso, mas isso também não funcionou :(
JGeer 04/04
0

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.xmlpol 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}}
zhartaunik
fonte