Куда как удобнее обрабатывать заказ, если покупатель знает артикул товара. Но при этом хорошо бы избавить его от дополнительных движений, поисков артикула на сайте, записываний их на бумажку, потерь этих бумажек, поисков и вспоминаний. Давайте просто будем отправлять артикулы заказанных товаров сразу в письме с оповещением о заказе. И себе упростим процедуру, сделав эту отправку артикула автоматической.
1. Настраиваем инфоблок «Каталог»
Выбираем или создаем инфоблок «Каталог», создаем ему свойство «Артикул» с типом «Строка», присваиваем мнемонический код «ARTICLE»
2. Настраиваем компонент bitrix:sale.order.ajax
Находим файл component.php по пути bitrix/components/ваш сайт/sale.order.ajax/component.php
Ищем в нем участок кода
// mail message
if (empty($arResult["ERROR"]))
{
$strOrderList = "";
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
);
while ($arBasketItems = $dbBasketItems->Fetch())
{
$strOrderList .= $arBasketItems["ID"]." - ".$arBasketItems["NAME"]." - ".$arBasketItems["QUANTITY"]." ".GetMessage("SOA_SHT").": ".SaleFormatCurrency($arBasketItems["PRICE"], $arBasketItems["CURRENCY"]);
$strOrderList .= "\n";
}
$arFields = Array(
"ORDER_ID" => $arResult["ORDER_ID"],
"ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", SITE_ID))),
"ORDER_USER" => ( (strlen($arUserResult["PAYER_NAME"]) > 0) ? $arUserResult["PAYER_NAME"] : $USER->GetFullName() ),
"PRICE" => SaleFormatCurrency($totalOrderPrice, $arResult["BASE_LANG_CURRENCY"]),
"BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
"EMAIL" => (strlen($arUserResult["USER_EMAIL"])>0 ? $arUserResult["USER_EMAIL"] : $USER->GetEmail()),
"ORDER_LIST" => $strOrderList,
"SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
"DELIVERY_PRICE" => $arResult["DELIVERY_PRICE"],
);
$eventName = "SALE_NEW_ORDER";
$bSend = true;
$db_events = GetModuleEvents("sale", "OnOrderNewSendEmail");
while ($arEvent = $db_events->Fetch())
if (ExecuteModuleEventEx($arEvent, Array($arResult["ORDER_ID"], &$eventName, &$arFields))===false)
$bSend = false;
if($bSend)
{
$event = new CEvent;
$event->Send($eventName, SITE_ID, $arFields, "N");
}
}
Выделяем фрагмент
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
);
И заменяем на код
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
);
Каждому товару вызываем значение артикула. Для этого находим фрагмент кода
while ($arBasketItems = $dbBasketItems->Fetch())
{
$strOrderList .= $arBasketItems["ID"]." - ".$arBasketItems["NAME"]." - ".$arBasketItems["QUANTITY"]." ".GetMessage("SOA_SHT").": ".SaleFormatCurrency($arBasketItems["PRICE"], $arBasketItems["CURRENCY"]);
$strOrderList .= "\n";
}
И заменяем его новым
while ($arBasketItems = $dbBasketItems->Fetch())
{
$article_find = CIBlockElement::GetProperty($IBLOCK_ID, $arBasketItems["PRODUCT_ID"], array(), Array("CODE"=>"ARTICLE"));
if($article_value = $article_find->Fetch()) $product_article = $article_value["VALUE"];
else $product_article = 'No';
$strOrderList .= $product_article.' - '.$arBasketItems["ID"]." - ".$arBasketItems["NAME"]." - ".$arBasketItems["QUANTITY"]." ".GetMessage("SOA_SHT").": ".SaleFormatCurrency($arBasketItems["PRICE"], $arBasketItems["CURRENCY"]);
$strOrderList .= "\n";
}
Готово! Проверено на редакции "Малый Бизнес".
-------------------------------
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» http://www.acrit-studio.ru/pantry-programmer/solutions-to-bugs-and-errors-1c_bitrix/the-experience-of-developing-a-_trade-management_-in-_bitrix/ каждый день!
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев