Как добавить проверку условий, чтобы определить, какой шаблон будет использоваться в транзакционных электронных письмах?


Я пытаюсь изменить свой шаблон электронной почты, чтобы генерировать различную информацию о продукте на основе группы клиентов . Например, если клиент принадлежит к группе A, загрузите modified.phtml, иначе загрузите default.phtml.

В частности, я работаю с шаблоном электронной почты нового заказа, в котором базовый транзакционный шаблон электронной почты вызывает {{layout handle="sales_email_order_items" order=$order}}, который загружает файл шаблона в /app/design/frontend/rwd/default/template/email/order/items.phtml.

Этот шаблон в конечном итоге вызывает echo $this->getItemHtml($_item).

Из того, что я могу сказать, это загружает файл шаблона /app/design/frontend/rwd/default/template/email/order/items/order/default.phtml, который выводит информацию о шаблоне для печати содержимого каждого элемента (артикул, название, цена и т.д.) в таблице.

Это то, чего я пытаюсь достичь:

$customerGroupId    = $this->getCustomerGroupId();
$customerGroupName  = Mage::getModel('customer/group')->load($customerGroupId)->getCustomerGroupCode();
if($customerGroupName = 'A') {
    // How to getItemHtml from different template?
} else {
    echo $this->getItemHtml($_item)
}

Я предполагаю, что мне нужно будет добавить ссылку на мой modified.phtml в файл /app/design/frontend/rwd/default/layout/sales.xml примерно так:

<sales_email_order_items>
    <block type="sales/order_email_items" name="items" template="email/order/items.phtml">
        <action method="addItemRender"><type>default</type><block>sales/order_email_items_order_default</block><template>email/order/items/order/default.phtml</template></action>
        // modified.phtml reference here?

Могу ли я заставить getItemHtml указать другой шаблон?

Или мне нужно подойти к этому по-другому?

Я мог бы заменить {{layout handle...}} на {{block...}} позвоните и поместите всю информацию о шаблоне в мои блоки if... else..., но это кажется очень банальным. Есть какие-нибудь мысли или предложения?

Author: travisw, 2015-07-10

1 answers

Изменение itemHtml зависит от группы клиентов. Вы можете добиться этого в файле макета, используя вспомогательный метод.

<sales_email_order_items> 
     <block type="sales/order_email_items" name="items" template="email/order/items.phtml">
         <action method="addItemRender"><type>default</type><block>sales/order_email_items_order_default</block><template helper="mymodule/data/myFunction"/></action>

Затем создайте функцию myFunction в своем вспомогательном файле

 app/code/{local|community}/yourNamespace/yourModule/helper/Data.php.

Используйте приведенный ниже код

Обновление:

public function myFunction()
{
    $customerGroupName = '';
    if($customerGroupId = Mage::getSingleton('adminhtml/sales_order_create')->getQuote()->getCustomerGroupId()):
        $customerGroupName = Mage::getModel('customer/group')->load($customerGroupId)->getCustomerGroupCode();
    elseif(Mage::getSingleton('customer/session')->isLoggedIn()):
        $customerGroupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
        $customerGroupName = Mage::getModel('customer/group')->load($customerGroupId)->getCustomerGroupCode();
    endif;
    if($customerGroupName == 'General') { 
       return 'email/order/items/order/default.phtml'; 
    } else { 
      return 'email/order/items/order/another.phtml';
    }
 }

Вот и все.

 1
Author: MeenakshiSundaram R, 2015-07-14 07:26:32