Drupal → Отправить в письме к заказу список товаров (Commerce)

23.10.2013

В рулсе commerce_checkout_order_email, отправляющем покупателю уведомление о заказе, уже доступен токен со списком товаров — [commerce-order:commerce_line_items], но по сути это html код отрендеренной вьюшки commerce_line_item_table. Без модулей, позволяющих рассылать HTML письма, результат в plain text выглядит ужасно.

Решение — вместо токена использовать следующий код:

<?php
$commerce_order_wrapper = entity_metadata_wrapper('commerce_order', $commerce_order);
$line_item_types = commerce_product_line_item_types();
foreach ($commerce_order_wrapper->commerce_line_items as $line_item) {
  if (!in_array($line_item->type->value(), $line_item_types)) continue;
  echo format_string('- @title, @unit_amount @currency x @quantity', array(
    '@title'       => $line_item->commerce_product->title->value(),
    '@quantity'    => $line_item->quantity->value(),
    '@unit_amount' => $line_item->commerce_unit_price->amount_decimal->value(),
    '@currency'    => $line_item->commerce_unit_price->currency_code->value(),
  )) . "\n";
}
?>

Для работы должен быть включён модуль PHP filter.

Для продвинутой темизации писем Commerce есть модуль Commerce Email.

Написанное актуально для
Commerce 1.x
Похожие записи

Комментарии

Игорь
08.04.2015, 20:17

Сделал наконец то красивое и удобное письмо.
1. Поставил Commerce Email - 7.x-2.x-dev, хотя правильнее было бы взять нужный код и вставить в свой модуль, но лень ;-)
2. Отключаем правило в рулсе отправка мыла по умолчанию только заказчику.
3. Токен [commerce-email-order-items] модуля бредоват и не красив вывод - пишем свой токен [mymodule-order-items] это всего два хука hook_token_info_alter() и hook_tokens(). И выводим вьюху: return views_embed_view('commerce_cart_summary', 'default', $order_wrapper->order_id->value());
Удобно настраивать! По такому же принципу в сбоке кикстарт2 сделано (от туда идею и взял)
4. Commerce Email требует htmlmail это и бесит. Мне этот модуль не нужен был, хотя пользуются им аж 31,950 sites, мне больше понравился mimemail + в нем же есть и включаем Mime Mail CSS Compressor (mimemail_compress). В настройках Mail System (mailsystem) admin/config/system/mailsystem выбираем MimeMailSystem везде + свою тему.
Всё. Красивая вьюха-таблица со стилями вместо классов приходит на почту, если у вас красивая тема ;-)
Профит.

с Mimemail можно и [commerce-order:commerce_line_items] использовать

Игорь
08.04.2015, 20:51

Использовать то можно, проверил только что, вывод почти одинаков и похож на вьюху - commerce_line_item_table в ней подвала нет - Commerce Order: Общая сумма заказа , только не хватает:
Подытог 1 р.
Экспресс доставка 2 р.
Общая сумма заказа 3 р.

Добавить комментарий