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


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.