Отображать строку в транзакционном электронном письме, если выбран способ оплаты


8

Я хочу отображать строку только тогда, когда клиент выбирает способ оплаты заказа денежным переводом. Когда клиент выбирает денежный перевод в качестве способа оплаты, я хочу отобразить <li>дополнительную строку в электронном сообщении о транзакции.

Если клиент выбирает другой способ оплаты, дополнительный <li>должен быть скрыт.

Я пробовал этот код, но это не работает:

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

Как я могу этого достичь?

Ответы:


7

В этом случае вы можете управлять этим обработчиком.

Использовать обработчик:

Создайте обработчик и определите его в файле макета:

create a handlerи с помощью этого обработчика визуализировал файл phtml. На local.xmlв app/design/frontend/YOUR_PAackage/YOUR_template/layoutопределите обработчик.

Код файла макета, например:

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

Позвоните этому обработчику в шаблоне электронной почты

затем on email html call this handler(locale/YourLANG/template/email/)

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

Код phtml файла:

Тогда на phtml fileпоставить код вродеshow extra li

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

Изменить: расположение phtml file: app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

ИЛИ: без вызова обработчика:

вызвать файл блока без обработчика макета и параметра ans для

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

В этом случае необходимо установить в mangento areaкачестве в frontendкачестве PHTML файла вызова здесь


Привет, Амит, где я могу найти файл showcheckmo.phtml или где мне нужно его создать?
JGeer

обновленный, пожалуйста, проверьте
Amit Bera

Пробовал, но это не работает. Строка не отображается внутри электронной почты.
JGeer

Попробуйте поместить статический контент в phtml. И ХБП текст идет или нет
Амит Бера

Нет также со статическим контентом это не работает. Что я делаю неправильно?
JGeer

0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'

Попробовал это, но это также не сработало :(
JGeer

0

Я постараюсь ответить на ваш первоначальный вопрос - как использовать директиву с условием. Для отладки я использую xDebug. И по моему мнению, это очень трудно для отладки электронных писем. В этом случае я покажу вам пример с той же структурой в другой части magento.

На продажах / заказах / просмотрах есть такая же структура. Структура вывода адреса определяется Mage/Core/etc/config.xmlв default/customer/address_templates/text.

Наша задача будет добавить любое условие, чтобы показать или не показывать «название компании». Директивы , такие как вар , зависят , если синтаксический анализ в Varien_Filter_Templateв методе фильтре ($ значения) . В этом методе есть итерация всех $ конструкций (если / зависит / var) и каждой конструкции, используемой в этом вызове:

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

Для каждого if / depende / var существует свой метод. Давайте посмотрим наpublic 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];
    }
}

Теперь давайте посмотрим на защищенный метод _getVariable. Я хотел бы обратить ваше внимание на один ряд:

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

и посмотрите на комментарий ниже:

// If object calling methods or getting properties

Таким образом, чтобы сделать условие, наши $ stackVars должны быть объектом и источником Varien_Object (большинство моделей расширяется от Mage_Core_Model_Abstract, который расширяется от Varien_Object). Давайте поднимемся на несколько ступеней выше. Нам нужно добавить в stackVars и объект.

В моем примере в классе Mage_Customer_Block_Address_Renderer_Default magento вызывает метод filter ($ value), о котором я упоминал выше.


Здесь я предоставляю решение. Предупреждение! Это решение не очень чистое. Это цель показать поведение magento. Пожалуйста, все переписываете сами.

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

В этом методе мы добавим объект заказа в массив данных. В соответствии с моей задачей давайте добавим объект заказа в этот массив. Сделайте это до '$ formater-> setVariables ($ data);'

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

После этого magento проанализирует этот объект и вызовет любой его метод. Например, мы добавляем новый метод getPaymentOutput (). Поместите простую функциональность в класс Order:

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

и только после этого мы вносим изменения в директиву xml следующим образом:

{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.