Afficher la ligne dans l'e-mail transactionnel si le mode de paiement est

8

Je souhaite afficher une ligne uniquement lorsque le client sélectionne le mode de paiement de paiement. Lorsqu'un client sélectionne le mandat comme mode de paiement, je souhaite afficher une <li>ligne supplémentaire dans l'e-mail de transaction.

Si le client sélectionne un autre mode de paiement, celui-ci <li>doit être masqué.

J'ai essayé ce code, mais cela ne fonctionne pas:

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

Comment puis-je y parvenir?

JGeer
la source

Réponses:

7

Dans ce cas, vous pouvez gérer cela par gestionnaire.

Utiliser le gestionnaire:

Créez un gestionnaire et définissez-le dans le fichier de mise en page:

create a handleret l'utilisation de ce gestionnaire a rendu un fichier phtml. Activé local.xmlà app/design/frontend/YOUR_PAackage/YOUR_template/layoutdéfinir le gestionnaire.

Code de fichier de mise en page comme:

    <?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>

Appelez ce gestionnaire au modèle d'e-mail

alors on email html call this handler(locale/YourLANG/template/email/)

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

code du fichier phtml:

Ensuite, phtml filemettez le code commeshow extra li

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

Modifier: l'emplacement de phtml fileest: app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

OU: Sans appel du gestionnaire:

appeler un fichier de bloc sans gestionnaire de disposition et paramètre ans pour

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

Dans ce cas, le besoin de mettre mangento areaen frontendtant que fichier phtml appelant d'ici

Amit Bera
la source
Salut Amit, où puis-je trouver le fichier showcheckmo.phtml ou où dois-je le créer?
JGeer
mis à jour, veuillez vérifier
Amit Bera
J'ai essayé, mais cela ne fonctionne pas. La ligne ne s'affiche pas dans l'e-mail.
JGeer
Essayez de mettre du contenu statique sur phtml. Et CKD le texte venant ou non
Amit Bera
Non également avec un contenu statique, cela ne fonctionne pas. Qu'est-ce que je fais mal?
JGeer
0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'
eetzen
la source
J'ai essayé cela, mais cela n'a pas fonctionné non plus :(
JGeer
0

Je vais essayer de répondre à votre question initiale - comment utiliser la directive avec condition. Pour le débogage, j'utilise xDebug. Et à mon avis, il est très difficile de déboguer les e-mails. Dans ce cas, je vous montre un exemple avec la même structure dans une autre partie de magento.

Sur la vente / commande / vue, il y a la même structure. La structure de sortie d'adresse déterminée en Mage/Core/etc/config.xmlpouces default/customer/address_templates/text.

Notre tâche sera d'ajouter toute condition pour afficher ou ne pas afficher le «nom de l'entreprise». Des directives telles que var , depend , si elles sont analysées dans le filtre deVarien_Filter_Template méthode ($ value) . Dans cette méthode, il y a une itération de toutes les constructions $ (if / depend / var) et de chaque construction $ utilisée dans cet appel:

$replacedValue = call_user_func($callback, $construction);

Pour chaque if / depende / var, il existe sa propre méthode. Regardonspublic 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];
    }
}

Voyons maintenant la méthode protégée _getVariable. Je voudrais attirer votre attention sur une ligne:

} elseif (isset($stackVars[$i-1]['variable']) && $stackVars[$i-1]['variable'] instanceof Varien_Object) {

et regardez le commentaire ci-dessous:

// If object calling methods or getting properties

Donc, pour conditionner notre $ stackVars doit être un objet et être une instace de Varien_Object (la plupart des modèles s'étendent de Mage_Core_Model_Abstract, qui s'étend de Varien_Object). Permet de monter quelques marches au-dessus. Nous devons ajouter à stackVars et object.

Dans mon exemple dans la classe Mage_Customer_Block_Address_Renderer_Default, Magento appelle le filtre de méthode ($ value), que j'ai mentionné ci-dessus.


Ici, je fournis une solution. Attention! Cette solution n'est pas très propre. Son but est de montrer le comportement de magento. Veuillez faire toutes les réécritures vous-même.

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);
}

Dans cette méthode, nous ajouterons un objet order au tableau de données $. Selon ma tâche, ajoutons un objet de commande à ce tableau. Faites-le avant '$ formater-> setVariables ($ data);'

$data['order_object'] = $address->getOrder();

Après ce magento analysera cet objet et appellera n'importe quelle méthode. Par exemple, nous ajoutons une nouvelle méthode getPaymentOutput (). Mettez des fonctionnalités simples dans la classe Order:

public function isPrinted()
{
    if ($this->getPayment()->getMethod() == 'checkmo') {
        return true;
    } else {
        return false;
    }
}

et seulement après cela, nous apportons des modifications dans la directive xml avec ceci:

{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}
zhartaunik
la source