Skip to content

Instantly share code, notes, and snippets.

@vozhukh
Created February 18, 2017 23:14
Show Gist options
  • Save vozhukh/c60ee24407e058d32736b21f3066e85f to your computer and use it in GitHub Desktop.
Save vozhukh/c60ee24407e058d32736b21f3066e85f to your computer and use it in GitHub Desktop.
Аналог sale.basket.basket.small
<?if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
use Bitrix\Sale;
use Bitrix\Main\Loader;
use Bitrix\Main\Data\Cache;
use \Bitrix\Iblock\ElementTable;
use \Bitrix\Iblock\SectionTable;
Loader::includeModule('iblock');
Loader::includeModule('sale');
Loader::includeModule('currency');
$this->setFrameMode(true);
$currentSite = Bitrix\Main\Context::getCurrent()->getSite();
$fuserId = Sale\Fuser::getId();
$basket = Sale\Basket::loadItemsForFUser($fuserId, $currentSite);
if($this->StartResultCache(36000, $basket)) {
$basketItems = $basket->getBasketItems();
foreach ($basket as $basketItem) {
$entryId = $basketItem->getId();
$arResult['BASKET'][$entryId] = [
'ID' => $entryId,
'NAME' => $basketItem->getField('NAME'),
'PRODUCT_ID' => $basketItem->getProductId(),
'QUANTITY' => $basketItem->getQuantity(),
'PRICE' => $basketItem->getPrice(),
'DISCOUNT_PRICE' => $basketItem->getBasePrice(),
'WEIGHT' => $basketItem->getWeight()
];
$propertyCollection = $basketItem->getPropertyCollection();
foreach ($propertyCollection as $propertyItem) {
$propertyCode = $propertyItem->getField('CODE');
$arResult['BASKET'][$entryId]['FIELDS'][$propertyCode] = [
'ID' => $propertyItem->getField('ID'),
'VALUE' => $propertyItem->getField('VALUE'),
'NAME' => $propertyItem->getField('NAME')
];
}
$сache = Cache::createInstance();
if ($сache->initCache(604800, $arResult['BASKET'][$entryId]['PRODUCT_ID'], '/gtxtymt/basket/products')) {
$arResult['BASKET'][$entryId]['PRODUCT'] = $сache->getVars();
}
elseif ($сache->startDataCache()) {
$arResult['BASKET'][$entryId]['PRODUCT'] = ElementTable::getList(array('filter' => array('ID' => $arResult['BASKET'][$entryId]['PRODUCT_ID']), 'select' => array('ID', 'NAME', 'PREVIEW_PICTURE', 'IBLOCK_SECTION_ID')))->fetch();
$picture = CFile::GetFileArray($arResult['BASKET'][$entryId]['PRODUCT']['PREVIEW_PICTURE']);
$arResult['BASKET'][$entryId]['PRODUCT']['PREVIEW_PICTURE'] = CFile::ResizeImageGet($picture, array('width' => 55, 'height' => 44), BX_RESIZE_IMAGE_PROPORTIONAL)['src'];
if(!empty($arResult['BASKET'][$entryId]['PRODUCT']['IBLOCK_SECTION_ID'])) {
$arResult['BASKET'][$entryId]['PRODUCT']['SECTION'] = SectionTable::getList(array('select' => array('NAME'), 'filter' => array('ID' => $arResult['BASKET'][$entryId]['PRODUCT']['IBLOCK_SECTION_ID'])))->fetch();
}
$сache->endDataCache($arResult['BASKET'][$entryId]['PRODUCT']);
}
$allSum += ($arItem['PRICE'] * $arItem['QUANTITY']);
$allWeight += ($arItem['WEIGHT'] * $arItem['QUANTITY']);
}
$arBasket = [
'SITE_ID' => $currentSite,
'USER_ID' => $fuserId,
'ORDER_PRICE' => $allSum,
'ORDER_WEIGHT' => $allWeight,
'BASKET_ITEMS' => $arResult['BASKET']
];
$arOptions = array(
'COUNT_DISCOUNT_4_ALL_QUANTITY' => 'Y',
);
$arErrors = array();
CSaleDiscount::DoProcessOrder($arBasket, $arOptions, $arErrors);
foreach ($arBasket['BASKET_ITEMS'] as $key => $arItem) {
$arResult['BASKET'][$key] = $arItem;
$arResult['BASKET'][$key]['PRICE_FORMAT'] = CCurrencyLang::CurrencyFormat($arItem['PRICE'], 'RUB');
}
$arResult['PRICE']['DEFAULT'] = Sale\BasketComponentHelper::getFUserBasketPrice($fuserId, $currentSite);
$arResult['PRICE']['FORMAT'] = CCurrencyLang::CurrencyFormat($arResult['PRICE']['DEFAULT'], 'RUB');
$arResult['COUNT'] = count($arResult['BASKET']);
$arResult['TEXT'] = ($arResult['COUNT'] > 0) ? $arResult['COUNT'].' товар'.NumberWordEndingsEx($arResult['COUNT']).' в корзине' : 'В корзине нет товаров.';
$this->IncludeComponentTemplate();
}
if(!function_exists('NumberWordEndingsEx')) {
function NumberWordEndingsEx($num, $arEnds = false)
{
$lang = LANGUAGE_ID;
if ($arEnds === false) {
$arEnds = array('ів', 'ів', '', 'и');
}
if ($lang == 'ru') {
if (strlen($num) > 1 && substr($num, strlen($num) - 2, 1) == '1') {
return $arEnds[0];
} else {
$c = IntVal(substr($num, strlen($num) - 1, 1));
if ($c == 0 || ($c >= 5 && $c <= 9)) {
return $arEnds[1];
} elseif ($c == 1) {
return $arEnds[2];
} else {
return $arEnds[3];
}
}
} elseif ($lang == 'en') {
if (IntVal($num) > 1) {
return 's';
}
return '';
} else {
return '';
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment