Можно расширить функционал, добавив в корень модуля файлы addon_options.php
(для админки) и addon_include.php
(для рантайма). Эти изменения сохранится при обновлении базового модуля.
В файле addon_options.php
нужно определить метод showAddonTab()
который отвечает за рендер содержимого карточки.
В файле addon_include.php
можно произвести любые действия и записать их в массив $result. Все содержимое этого массива будет включено в макросы письма.
<?php if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
function showAddonTab() {
global $arSites, $APPLICATION, $module_id;
$site = $arSites[0]["LID"];
$orderId = GetTestOrder('TEST_ORDER_ID_' . $site, $site);
/* @var $result */
if (file_exists($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/" . $module_id . "/addon_include.php")) {
include($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/" . $module_id . "/addon_include.php");
}
?>
Макрос #BASKET_RAIMENTS# (превью)
<tr>
<td>
<?
echo $result['BASKET_RAIMENTS'];
?>
</td>
</tr>
<?
}
<?php
global $site;
if ($orderId && !$isAdmin) {
$result = [];
$result['BASKET_RAIMENTS'] = (new dkdev_extmail)::doCartMerged($orderId, 's1', ['PRICE', 'PRICE_ONE']);
}
<?php
function showAddonTab(){
global $module_id;
CModule::IncludeModule("iblock");
$orderId = COption::GetOptionInt($module_id,'TEST_ORDER_ID');
if ($orderId) {
$cart = '';
try
{
$cartObj = new dkdev_extmail;
$cart = $cartObj->runCustomAddon($orderId, true);
}
catch (SystemException $e)
{
echo 'Exception: ', $e->getMessage(), "<br>";
}
}
else
{
echo GetMessage("DKDEV_MAIL_UKAJITE_NOMER_TESTOV");
}
}
<?php
$arrOrder = CSaleOrder::GetByID($orderId);
if (!is_array($arrOrder))
return 'error';
$orderCurrency = $arrOrder['CURRENCY'];
$arBasketList = array();
$dbBasketItems = CSaleBasket::GetList(
$arOrder,
array("ORDER_ID" => $orderId),
false,
false,
array("ID", "PRODUCT_ID", "NAME", "QUANTITY", "PRICE")
);
while ($arItem = $dbBasketItems->Fetch())
$arBasketList[] = $arItem;
//BASKET LONG
//[pd4453-02] Item name (3000х1);
$temp_item_long = '[%SKU%] %NAME% (%PRICE%x%QUANTITY%);';
$temp_order_long = '%ITEMS% Сумма %PRICE_TOTAL%';
//BASKET LONG
//BASKET SHORT
//[pd4453-02] (3000х1); [900220] (790х2) Сумма 4580 руб
$temp_item_short = '[%SKU%] (%PRICE%x%QUANTITY%);';
$temp_order_short = '%ITEMS% Сумма %PRICE_TOTAL%';
//BASKET SHORT
$result = 'none';
$all_items_long = '';
$all_items_short = '';
foreach ($arBasketList as $arItem)
{
$this_item_long = $temp_item_long;
$this_item_short = $temp_item_short;
$arItemProps = CIBlockElement::GetByID($arItem["PRODUCT_ID"]);
$arItemProps = $arItemProps->GetNextElement();
$ar_res = $arItemProps->GetProperty('ARTNUMBER'); //ARTNUMBER код артикула в шаблоне клиента
$sku = trim($ar_res['VALUE']);
$this_item_long = str_replace('%PRICE%', round($arItem['PRICE']), $this_item_long);
$this_item_long = str_replace('%QUANTITY%', round($arItem['QUANTITY']), $this_item_long);
$this_item_long = str_replace('%NAME%', $arItem['NAME'], $this_item_long);
$this_item_long = str_replace('%SKU%', $sku, $this_item_long);
$this_item_short = str_replace('%PRICE%', round($arItem['PRICE']), $this_item_short);
$this_item_short = str_replace('%QUANTITY%', round($arItem['QUANTITY']), $this_item_short);
$this_item_short = str_replace('%NAME%', $arItem['NAME'], $this_item_short);
$this_item_short = str_replace('%SKU%', $sku, $this_item_short);
$all_items_long .= $this_item_long;
$all_items_short .= $this_item_short;
}
$temp_order_long = str_replace('%ITEMS%', $all_items_long, $temp_order_long);
$temp_order_long = str_replace('%PRICE_TOTAL%', SaleFormatCurrency($arrOrder['PRICE'], $orderCurrency), $temp_order_long);
$temp_order_short = str_replace('%ITEMS%', $all_items_short, $temp_order_short);
$temp_order_short = str_replace('%PRICE_TOTAL%', SaleFormatCurrency($arrOrder['PRICE'], $orderCurrency), $temp_order_short);
if($isAdmin)
{
echo '<b>#BASKET_LONG#</b><br>', $temp_order_long, '<br><br>';
echo '<b>#BASKET_SHORT#</b><br> ', $temp_order_short;
}
else
{
$result = [];
$result["BASKET_LONG"] = $temp_order_long;
$result["BASKET_SHORT"] = $temp_order_short;
}
Пример добавления в корзину 3-х полей на стандартном магазине.
addon_options.php
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) {
die();
}
function showAddonTab()
{
global $arSites, $module_id;
$site = $arSites[0]["LID"];
$orderId = GetTestOrder('TEST_ORDER_ID_' . $site, $site);
/* @var $result */
if (file_exists($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/" . $module_id . "/addon_include.php")) {
include($_SERVER["DOCUMENT_ROOT"] . BX_ROOT . "/modules/" . $module_id . "/addon_include.php");
}
?>
Макрос #BASKET_MANAGER# (превью)
<tr>
<td>
<?php
echo $result['BASKET_MANAGER'];
?>
</td>
</tr>
<?php
}
addon_include.php
<?php
/** @var string $orderId */
if ($orderId) {
$result = [];
$result['BASKET_MANAGER'] = $cart = dkdev_extmail::doCartMerged($orderId, 's1', [], [
'itemProps' => [
'override' => false,
'fields' => [
'10',
'DISCOUNT_PRICE',
'32',
],
'names' => [
'Прозводитель',
'Скидка',
'Артикул',
],
],
]);
}
override
false - добавить поля в конец корзины которая уже генерится для клиентов
true - полностью создать корзину с новыми полями