Добавляем в /bitrix/php_interface/admin_header.php
<?php
<? if (stripos($_SERVER['REQUEST_URI'], '/bitrix/admin/sale_order_view.php') !== false) : ?>
<script type="text/javascript">
$(function () {
$.ajax({ method: "GET", url: "/bitrix/diva/ajaxGetBasket.php", data: {ID: <?= intval($_REQUEST['ID']) ?>}
}).done(function (msg) {
$('.adm-s-result-container').prepend(msg);
});
});
</script>
<?endif;
?>
?>
Создаём обработчик /bitrix/diva/ajaxGetBasket.php
<?php
define("NO_KEEP_STATISTIC", true);
//define("NOT_CHECK_PERMISSIONS", true);
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
$ID = intval($_REQUEST['ID']);
if (!$USER->IsAdmin() || $ID == 0) {
die();
}
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/general/admin_tool.php");
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/lang/ru/admin/order_detail.php");
CModule::IncludeModule("iblock");
CModule::IncludeModule("catalog");
CModule::IncludeModule("sale");
$dbOrder = CSaleOrder::GetList(
array("ID" => "DESC"), array("ID" => $ID), false, false, array(
"ID", "LID", "PERSON_TYPE_ID",
"PAYED", "DATE_PAYED", "EMP_PAYED_ID", "PAY_VOUCHER_NUM", "PAY_VOUCHER_DATE",
"CANCELED", "DATE_CANCELED", "EMP_CANCELED_ID", "REASON_CANCELED",
"STATUS_ID", "DATE_STATUS", "EMP_STATUS_ID", "PRICE_DELIVERY",
"ALLOW_DELIVERY", "DATE_ALLOW_DELIVERY", "EMP_ALLOW_DELIVERY_ID",
"DEDUCTED", "DATE_DEDUCTED", "EMP_DEDUCTED_ID", "REASON_UNDO_DEDUCTED",
"MARKED", "DATE_MARKED", "EMP_MARKED_ID", "REASON_MARKED",
"PRICE", "CURRENCY", "DISCOUNT_VALUE", "SUM_PAID", "USER_ID", "PAY_SYSTEM_ID",
"DELIVERY_ID", "DATE_INSERT", "DATE_INSERT_FORMAT", "DATE_UPDATE", "USER_DESCRIPTION",
"ADDITIONAL_INFO", "PS_STATUS", "PS_STATUS_CODE", "PS_STATUS_DESCRIPTION",
"PS_STATUS_MESSAGE", "PS_SUM", "PS_CURRENCY", "PS_RESPONSE_DATE", "COMMENTS",
"TAX_VALUE", "STAT_GID", "RECURRING_ID", "AFFILIATE_ID", "LOCK_STATUS",
"USER_LOGIN", "USER_NAME", "USER_LAST_NAME", "USER_EMAIL", "DELIVERY_DOC_NUM",
"DELIVERY_DOC_DATE", "STORE_ID", "ACCOUNT_NUMBER", "TRACKING_NUMBER",
)
);
if (($arOrder = $dbOrder->Fetch())) {
?>
<div class="load_product order_summary" style="float: left;
">
<table width="100%" class="itog_header"><tr><td>Предложите покупателю</td></tr></table>
<div id="tabs">
<?
$crmMode = false;
$displayNone = "block";
$displayNoneBasket = "block";
$displayNoneViewed = "block";
$arFilterRecomendet = array();
$arBasketItems = array();
$dbBasketTmp = CSaleBasket::GetList(array("ID" => "ASC"), array("ORDER_ID" => $arOrder["ID"]), false, false, array("ID", "PRODUCT_ID"));
while ($arBasketTmp = $dbBasketTmp->GetNext()) {
$arBasketItems[] = $arBasketTmp;
}
//pr($arBasketItems);
foreach ($arBasketItems as $arItem) {
if (!CSaleBasketHelper::isSetItem($arItem)) {
$arFilterRecomendet[] = $arItem["PRODUCT_ID"];
}
}
$arRecommendedResult = CSaleProduct::GetRecommendetProduct($arOrder["USER_ID"], $arOrder["LID"], $arFilterRecomendet);
$recomCnt = count($arRecommendedResult);
if ($recomCnt > 2) {
$arTmp = array();
$arTmp[] = $arRecommendedResult[0];
$arTmp[] = $arRecommendedResult[1];
$arRecommendedResult = $arTmp;
}
if ($recomCnt <= 0)
$displayNone = "none";
$arErrors = array();
$arFuserItems = CSaleUser::GetList(array("USER_ID" => intval($arOrder["USER_ID"])));
$arCartWithoutSetItems = array();
$arTmpShoppingCart = CSaleBasket::DoGetUserShoppingCart($arOrder["LID"], $arOrder["USER_ID"], $arFuserItems["ID"], $arErrors, array());
if (is_array($arTmpShoppingCart)) {
foreach ($arTmpShoppingCart as $arCartItem) {
if (CSaleBasketHelper::isSetItem($arCartItem))
continue;
$item = findPositionsByID($arCartItem["PRODUCT_ID"]);
if ($item['IBLOCK_ID'] != CATALOG_IBLOCK_ID) {
if ($item['PROPS']['CML2_LINK']['VALUE'] != "") {
$item = findPositionsByID($item['PROPS']['CML2_LINK']['VALUE']);
}
}
$arCartItem['MASTER'] = $item;
$arCartItem['NAME'] = "[" . $item['PROPS']['CML2_ARTICLE']['VALUE'] . "] " . $arCartItem['NAME'];
$arCartWithoutSetItems[] = $arCartItem;
}
}
$basketCnt = count($arCartWithoutSetItems);
if ($basketCnt > 2) {
$arTmp = array();
$arTmp[] = $arCartWithoutSetItems[0];
$arTmp[] = $arCartWithoutSetItems[1];
$arCartWithoutSetItems = $arTmp;
}
if ($basketCnt <= 0)
$displayNoneBasket = "none";
///
$arViewed = array();
$arViewedIds = array();
$viewedCount = 0;
$mapViewed = array();
if (CModule::includeModule("catalog")) {
$viewedIterator = \Bitrix\Catalog\CatalogViewedProductTable::getList(array(
'order' => array("DATE_VISIT" => "DESC"),
'filter' => array('FUSER_ID' => $arFuserItems["ID"], "SITE_ID" => $arOrder["LID"]),
'select' => array("ID", "FUSER_ID", "DATE_VISIT", "PRODUCT_ID", "LID" => "SITE_ID", "NAME" => "ELEMENT.NAME", "PREVIEW_PICTURE" => "ELEMENT.PREVIEW_PICTURE", "DETAIL_PICTURE" => "ELEMENT.DETAIL_PICTURE")
));
while ($viewed = $viewedIterator->fetch()) {
$viewed['MODULE'] = 'catalog';
$arViewed[$viewedCount] = $viewed;
$arViewedIds[] = $viewed['PRODUCT_ID'];
$mapViewed[$viewed['PRODUCT_ID']] = $viewedCount;
$viewedCount++;
}
unset($viewedCount);
$baseGroup = CCatalogGroup::getBaseGroup();
if (!empty($arViewedIds)) {
$priceIterator = CPrice::getList(
array(), array("PRODUCT_ID" => $arViewedIds, 'CATALOG_GROUP_ID' => $baseGroup['ID']), false, false, array("PRODUCT_ID", "PRICE", "CURRENCY"));
while ($productPrice = $priceIterator->fetch()) {
if (isset($mapViewed[$productPrice['PRODUCT_ID']])) {
$key = $mapViewed[$productPrice['PRODUCT_ID']];
$arViewed[$key]["PRICE"] = $productPrice["PRICE"];
$arViewed[$key]["CURRENCY"] = $productPrice["CURRENCY"];
}
}
}
$viewedCnt = count($arViewed);
$arViewed = array_slice($arViewed, 0, 2);
if (count($arViewed) <= 0)
$displayNoneViewed = "none";
}
else {
$displayNoneViewed = "none";
}
$tabBasket = "tabs";
$tabViewed = "tabs";
if ($displayNoneBasket == 'none' && $displayNone == 'none' && $displayNoneViewed == 'block')
$tabViewed .= " active";
if ($displayNoneBasket == 'block' && $displayNone == 'none')
$tabBasket .= " active";
?>
<div id="tab_1" style="display:<?= $displayNone ?>" class="tabs active" onClick="fTabsSelect('buyer_recmon', this);
" ><?= GetMessage('SOD_SUBTAB_RECOMENET') ?></div>
<div id="tab_2" style="display:<?= $displayNoneBasket ?>" class="<?= $tabBasket ?>" onClick="fTabsSelect('buyer_basket', this);
"><?= GetMessage('SOD_SUBTAB_BASKET') ?></div>
<div id="tab_3" style="display:<?= $displayNoneViewed ?>" class="<?= $tabViewed ?>" onClick="fTabsSelect('buyer_viewed', this);
"><?= GetMessage('SOD_SUBTAB_LOOKED') ?></div>
<?
if ($displayNone == 'block') {
$displayNoneBasket = 'none';
$displayNoneViewed = 'none';
}
if ($displayNoneBasket == 'block') {
$displayNone = 'none';
$displayNoneViewed = 'none';
}
if ($displayNoneViewed == 'block') {
$displayNone = 'none';
$displayNoneBasket = 'none';
}
?>
<div id="buyer_recmon" class="tabstext active" style="display:<?= $displayNone ?>">
<? echo fGetFormatedProductData($arOrder["USER_ID"], $arOrder["LID"], $arRecommendedResult, $recomCnt, $arOrder["CURRENCY"], 'recom', $crmMode);
?>
</div>
<div id="buyer_basket" class="tabstext active" style="display:<?= $displayNoneBasket ?>">
if (count($arCartWithoutSetItems) > 0)
echo fGetFormatedProductData($arOrder["USER_ID"], $arOrder["LID"], $arCartWithoutSetItems, $basketCnt, $arOrder["CURRENCY"], 'basket', $crmMode);
?>
</div>
<div id="buyer_viewed" class="tabstext active" style="display:<?= $displayNoneViewed ?>">
<?
if (count($arViewed) > 0)
echo fGetFormatedProductData($arOrder["USER_ID"], $arOrder["LID"], $arViewed, $viewedCnt, $arOrder["CURRENCY"], 'viewed', $crmMode);
?>
</div>
</div>
<script type="text/javascript">
function fTabsSelect(tabText, el)
{
BX('tab_1').className = "tabs";
BX('tab_2').className = "tabs";
BX('tab_3').className = "tabs";
BX(el).className = "tabs active";
BX(el).className = "tabs active";
BX(el).style.display = 'block';
BX('buyer_recmon').className = "tabstext";
BX('buyer_basket').className = "tabstext";
BX('buyer_viewed').className = "tabstext";
BX('buyer_recmon').style.display = 'none';
BX('buyer_basket').style.display = 'none';
BX('buyer_viewed').style.display = 'none';
BX(tabText).style.display = 'block';
BX(tabText).className = "tabstext active";
}
</script>
<script type="text/javascript">
/*
* click on recommendet More
*/
function fGetMoreProduct(type)
{
BX.showWait();
productData = <? echo CUtil::PhpToJSObject($arFilterRecomendet);
?>;
var userId = '<?= $arOrder["USER_ID"] ?>';
var fUserId = '<?= $arFuserItems["ID"] ?>';
var currency = '<?= $arOrder["CURRENCY"] ?>';
var lid = '<?= $arOrder["LID"] ?>';
BX.ajax.post('/bitrix/admin/sale_order_detail.php', '<?= CUtil::JSEscape(bitrix_sessid_get()) ?>&ORDER_AJAX=Y&type=' + type + '&arProduct=' + productData + '¤cy=' + currency + '&LID=' + lid + '&userId=' + userId + '&fUserId=' + fUserId + '&ID=<?= $ID ?>', fGetMoreProductResult);
}
function fGetMoreProductResult(res)
{
BX.closeWait();
var rs = eval('(' + res + ')');
if (rs["ITEMS"].length > 0)
{
if (rs["TYPE"] == 'basket')
BX("buyer_basket").innerHTML = rs["ITEMS"];
if (rs["TYPE"] == 'recom')
BX("buyer_recmon").innerHTML = rs["ITEMS"];
if (rs["TYPE"] == 'viewed')
BX("buyer_viewed").innerHTML = rs["ITEMS"];
}
}
</script>
</div>
<?
}
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php");
?>