WebAsyst. Письмо о смене статуса заказа

Недавно мне поручили сделать красивое письмо о смене статуса заказа в Интернет-магазине Свежий Воздух. Отправляться оно должно при смене статуса заказа на «Доставлено и оплачено». Вот такое вот письмо (Это скрин psd шаблона):

Так как у WebAsyst Shop-Script стандартно нет такой функции, начал я с редактирования php функции которая отвечает за изменение статуса заказа, а именно function stChangeOrderStatus в файле /published/SC/html/scripts/core_functions/statistic_functions.php.

Итак, функция отправляет письмо клиенту если при изменении статуса заказа отметить галочку «Уведомить покупателя об этом изменении по email». Но нам нужно чтобы письмо отправлялось автоматически при смене статуса заказа. Для этого я добавил условие:

if($statusID=='5'){
 $Order = ordGetOrder( $orderID );
 $Customer = new Customer();
 $Customer->loadByID($Order['customerID']);
 $Email = $Customer->Email?$Customer->Email:$Order['customer_email'];
 $Pass = $Customer->cust_password?$Customer->cust_password:$Order['customer_pass'];
 $FirstName = $Customer->first_name?$Customer->first_name:$Order['customer_firstname'];
 $template_vars = array();
 $template_vars['customer_firstname'] = $FirstName;
 $template_vars['customer_email'] = $Email;
 $template_vars['customer_pass'] = $Pass;
 $template_vars['order_content'] = ordGetOrderContent ($orderID);
 $subject = translate("email_dostavleno");
 xMailTxt($Email,$subject, 'customer.order.change_status_dostavleno.txt',$template_vars);
}

перед условием

if($notify){

которое заменил на

elseif($notify){

оно выполняется только в том случае если мы отметим чекбокс для отправки уведомления покупателю.
Что же делает добавленное мной условие.
Для начала хочу сказать что выполняется оно в случае если мы изменили статус заказа на statusID = 5 тоесть «Доставлен и оплачен». ID статусов заказов можно посмотреть в mysql таблице SC_order_status базы данных сайта.

1 Отменен 
2 Новый
3 В обработке
5 Доставлен и оплачен
15 Деньги возвращены 
14 Деньги списаны с карты клиента
23  Произведён монтаж
21 Отправлен
22 Отложен

А в теле условия мы присваиваим переменным $FirstName,$Email,$Pass — имя заказчика, email (в нашем случае логин, дело в том что в данном сайте логин равен email), и пароль, и подготваливаем их для отправки в шаблон. В шаблоне же вызываем их так:

 логин - {$customer_email}
 пароль - {$customer_pass}
имя покупателя - {$customer_firstname}

Шаблоны писем кстати в папке /published/SC/html/scripts/templates/email
Вы можете создать свой шаблон как это сделал я. В теле условия в предпоследней строке файл шаблона указан
customer.order.change_status_dostavleno.txt
Но это ещё не всё, ведь нужно ещё добавить возможность отправлять пользователю не только Имя товара, но и картинку с описанием. Также в теле добавленного мной условия можно увидеть строку

$template_vars['order_content'] = ordGetOrderContent ($orderID);

Здесь переменной присваивается функция которая возвращает данные о товаре. Найти её можно в файле /published/SC/html/scripts/core_functions/order_functions.php . Функция формирует массивы данных о товаре. Для того чтобы в ней также были данные о картинке товара и краткое описание нам нужно добавить строки

$row['thumbnail'] = GetThumbnail($product['productID']);
$row['brief_description'] = $product['brief_description'];

перед

$row["PriceToShow"] =  $currency_code." ".RoundFloatValueStr($currency_value*$row["Price"]*$row["Quantity"]);

Теперь в шаблоне письма выводим массив с картинками, названиями и описанием товара:

{foreach from=$order_content item=item name=order_content}

{$item.name|escape:'html'} (x{$item.Quantity}): {$item.Price} руб.

{$item.brief_description}



{/foreach}

У меня получилось вот так (Скрин пришедшего на почту сообщения о доставке товара)

Рассказать друзьям

Опубликовать в Google Plus
Опубликовать в Одноклассники