xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

В рулсе commerce_checkout_order_email, отправляющем покупателю уведомление о заказе, уже доступен токен со списком товаров — [commerce-order:commerce_line_items], но по сути это html код отрендеренной вьюшки. Без модулей, позволяющих рассылать 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";
}
?>

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

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

Комментарии RSS

Как в письме еще отправить способ получения товара? Нигде не могу найти.
Спасибо!

Спасибо! Очень помогло!
2mamba способ доставки есть там же, проверить можно значение на 'shipping'. Мне нужно было просто вывести стоимость доставки, поэтому я сделал следующим образом:
<?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 ($line_item->type->value() == 'shipping) {
//способ доставки хранится тут
$ship = $line_item->commerce_unit_price->amount_decimal->value().' '.$line_item->commerce_unit_price->currency_code->value();
}
if (in_array($line_item->type->value(), $line_item_types)) {
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";
}
}
if (isset($ship)) echo "Доставка: $ship";
?>

Вставил код. Он так и приходит кодом.

Оформление заказа происходит от анонимного пользователя

Включил php filter. Теперь приходит вместо кода пустота

Сделал наконец то красивое и удобное письмо.
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] использовать

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании