Задача: чтобы в почтовых уведомлениях о новом заказе у каждого товара указывался "Артикул" (свойство элементов инфоблока).
Имеем: 1 инфоблок каталог, свойство "Артикул" типа "Строка" с мнемоническим кодом "ARTICLE", форма заказа "bitrix:sale.order.ajax"
Решение:1) Открываем файл /bitrix/components/bitrix/sale.order.ajax/component.php или /bitrix/components/Ваше_пространство_имен/sale.order.ajax/component.php.
2) Ищем код:
// 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");
}
}
|
3) Добавляем к выборке записей из корзины параметр PRODUCT_ID
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("PRODUCT_ID", "ID", "NAME", "QUANTITY", "PRICE", "CURRENCY")
);
|
4) Для каждого товара получаем значение артикула, делаем это в следующей области:
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";
}
|
Вот и все. На редакции "Малый Бизнес" 11.0.4 все работает.
По аналогии можно сделать и с компонентом "bitrix:sale.order.full".
Если вы используете модуль "Расширенные уведомления о заказах", то править придется /bitrix/modules/bestrank.salemail/include.php, надеюсь ребята не обидятся, что я влез в их код