[msPromoCode] Кейс: вывод информации по промо-коду в письме



Часто слышу вопрос о выводе промо-кода и информации по скидке в письме пользователю/менеджеру. На самом деле такая возможность есть уже давно, хоть и не совсем явным образом бросается в глаза. Делается это в 2 простых шага, которые описаны ниже.

  1. В чанке письма, где нибудь в начале, пропишите такой код:
    {var $coupon = (('!pdoResources' | snippet : [
        'class' => 'mspcOrder',
        'loadModels' => 'msPromoCode',
        'innerJoin' => [ [
            'class' => 'mspcCoupon',
            'alias' => 'mspcCoupon',
            'on' => 'mspcCoupon.id = mspcOrder.coupon_id',
        ] ],
        'select' => [
            'mspcOrder' => 'code, discount_amount',
        ],
        'where' => [
            'mspcOrder.order_id' => $order['id'],
        ],
        'sortby' => '{"id":"ASC"}',
        'return' => 'json',
    ]) | fromJSON)}
    {if $coupon?}
        {var $coupon = $coupon[0]}
    {/if}

    Таким образом мы получим массив в переменную $coupon:
    Array (
        [code] => all
        [discount_amount] => 2112.22
    )

  2. Имея эту информацию по купону мы можем узнать и стоимость корзины без скидки:
    Сумма скидки: {$coupon['discount_amount']}
    Стоимость со скидкой: {$total.cart_cost}
    Стоимость без скидки: {($coupon['discount_amount'] + ($total.cart_cost | replace : ' ' : ''))}

    Обратите внимание на то, как я обрабатываю стоимость корзины:
    $total.cart_cost | replace : ' ' : ''

    Дело в том, что в чанк письма стоимость передаётся не числом, а строкой с пробелами в виде разделителей тысяч: 1 000.00. Если его не обработать, то подсчёт будет некорректен.

Важно учитывать, что это решение 100% работает для miniShop2 >= 2.4, т.к. проверялось только на нём. Хотя можно попытаться совместить и с более ранними версиями магазина, скорее всего, даже без существенных правок.
26 december 2016, 12:25    Павел Гвоздь   
7    356 +10

Comments (0)

    You need to login to create comments.