Shop-Script 3: Редактируем письмо-уведомление администратору о новом заказе

Рано или поздно владельцы магазинов на Shop-Script 3 сталкиваются с различными неудобствами стандартных функций движка. Как только популярность магазина переваливает за некоторую планку — проблемы выскакивают как из ящика Пандоры — сразу и много. Определённо можно сказать, что у разработчиков не было больших и до предела нагруженных магазинов, иначе стратегия поведения наверняка бы строилась по-другому.

Вообще Shop-Script мне частенько напоминает продукцию нашего автопрома, которую после сборки нужно вдумчиво и с чувством обрабатывать напильником. Вот например, такая вещь как письмо-уведомление о новом заказе, которое приходит на почту администратору магазина. С первого взгляда с ним всё в порядке, но это ровно до того момента, как писем становится много. Когда их становится очень много, работать уже практически невозможно.

Что можно сделать?

Ну, для начала.

Функция отправки всяческих писем спрятана в файле order_functions.php, который находится в published/SC/html/scripts/core_functions/. название функции, отвечающей за отправку писем-уведомлений — _sendOrderNotifycationToAdmin, в этой статье мы будем работать в основном с ней.

Картинка заказанного товара в письме-уведомлении.

Дабы не захламлять статью пояснениями (их можно спросить в комментариях), приведу сразу кусок кода:

	//fetch order content from the database
	$content = ordGetOrderContent( $orderID );
	for( $i=0; $i<count($content); $i++ )
	{
		$productID = GetProductIdByItemId( $content[$i]["itemID"] );
		if ( $productID == null || trim($productID) == "" )
			continue;
		$q = db_query( "select ".LanguagesManager::sql_prepareField('name')." AS name, product_code from ".PRODUCTS_TABLE." where productID=".$productID );
		$product = db_fetch_row($q);
$content[$i]['thumbnail'] = GetThumbnail ($productID);
		//$content[$i]["product_code"] = $product["product_code"];
		/*$variants	= GetConfigurationByItemId( $content[$i]["itemID"] );
		$options	= GetStrOptions( $variants );
		if ( $options != "" )
			$content[$i]["name"] = $product["name"]."(".$options.")";
		else
			$content[$i]["name"] = $product["name"];*/
$content[$i]['productID'] = $productID; 
$content[$i]['product_slug'] = $product["slug"];
		$content[$i]["Price"] = $order["currency_code"]." ".(
			RoundFloatValueStr($order["currency_value"]*$content[$i]["Price"])  );

Строка 10 и есть та самая переменная с картинкой заказанного товара. 18 и 19 — переменные для создания ссылки на заказанный товар в письме. Они нам пригодятся ниже.

Письмо с уведомлением о заказе от лица клиента.

Т.е. вместо стандартного заголовка, получаем письмо в котором подставляется адрес и имя клиента в качестве отправителя. Очень удобно: во-первых заказы на почте хоть как-то отличаются друг от друга, во-вторых можно вести переписку с клиентом не выколупывая его адрес из заказа. Вот такой кусок:

	$html = $smarty_mail->fetch( $mailTemplate);

$res = ss_mail( CONF_ORDERS_EMAIL, translate('ordr_id')." ".$order['orderID_view'],$html, true, array ('From' => $order['customer_email'], 'FromName' => $order['customer_firstname'].' '.$order['customer_lastname'], 'Reply-To' => $order['customer_email']));

Соответственно, для того чтобы вывести все эти данные, редактируем admin_order_notification.txt, который лежит в published/SC/html/scripts/templates/email/.

Как использовать новые переменные?

Ссылка на заказанный товар:

<a href="http://{$smarty.server.HTTP_HOST}{"?productID=`$content[i].productID`&product_slug=`$content[i].product_slug`"|set_query}">{$content[i].name|escape:'html'}</a>

Картинка товара:

{if $content[i].thumbnail}<img src="http://{$smarty.server.HTTP_HOST}{$smarty.const.URL_PRODUCTS_PICTURES}/{$content[i].thumbnail}" alt="{$content[i].name|escape:'html'}">{/if}

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

пятнадцать − четырнадцать =