foreach ($basketItems as $basketItem) {
$basketPropertyCollection = $basketItem->getPropertyCollection();
$propertyValues = $basketPropertyCollection->getPropertyValues();
}
Ранее настраивал комплексный компонент, представляю что делать
Bitrix\Main\Loader::includeModule('sale');
$siteId = 's1';
$fUserId = \Bitrix\Sale\FUser::getId();
$productId = 139;
$productByBasketItem = null;
$bProductInBasket = false;
$basket = \Bitrix\Sale\Basket::loadItemsForFUser($fUserId, $siteId);
$basketItems = $basket->getBasketItems();
if($basketItems) {
foreach($basketItems as $basketItem) {
if($basketItem->getField('PRODUCT_ID') == $productId) {
$productByBasketItem = $basketItem;
$bProductInBasket = true;
break;
}
}
}
if($productByBasketItem) {
$productByBasketItem->delete();
$basket->save();
}
\Bitrix\Main\Loader::includeModule('iblock');
\Bitrix\Main\Loader::includeModule('catalog');
$iblocksId = [2, 3];
$iterator = \Bitrix\Iblock\ElementTable::getList([
'select' => ['IBLOCK_ID', 'ID'],
'filter' => ['IBLOCK_ID' => $iblocksId, '!PRODUCT.CAN_BUY_ZERO' => 'D', '!PRODUCT.TYPE' => \Bitrix\Catalog\ProductTable::TYPE_SKU],
'runtime' => [
'PRODUCT' => [
'data_type' => '\Bitrix\Catalog\ProductTable',
'reference' => ['=this.ID' => 'ref.ID']
]
]
]);
$elements = [];
while($row = $iterator->fetch()) {
$elements[] = $row;
}
foreach($elements as $element) {
CCatalogProduct::Update($element['ID'], ['CAN_BUY_ZERO' => 'D']);
}
echo 'Количество = '.count($elements);
$obItem = $obBasket->getExistsItem('catalog', $productId, [
0 => ['CODE' => 'PROP1', 'VALUE' => 'electron'],
//......
]);
$obItem = $obBasket->getExistsItem('catalog', $productId, [
0 => ['CODE' => 'ARTNUMBER', 'VALUE' => '235-81-03'],
1 => ['CODE' => 'COLOR_REF', 'VALUE' => 'Черный'],
2 => ['CODE' => 'SIZES_CLOTHES', 'VALUE' => 'XS'],
3 => ['CODE' => 'CATALOG.XML_ID', 'VALUE' => 'clothes_offers_s1'],
4 => ['CODE' => 'PRODUCT.XML_ID', 'VALUE' => '332#337'],
]);
\Bitrix\Main\Loader::includeModule('sale');
$siteId = 's1';
$fUserId = \Bitrix\Sale\FUser::getId();
$productId = 139;
$productByBasketItem = null;
$bProductInBasket = false;
$basket = \Bitrix\Sale\Basket::loadItemsForFUser($fUserId, $siteId);
$basketItems = $basket->getBasketItems();
if($basketItems) {
foreach($basketItems as $basketItem) {
if($basketItem->getField('PRODUCT_ID') == $productId) {
$productByBasketItem = $basketItem;
$bProductInBasket = true;
break;
}
}
}
var_dump($bProductInBasket);
var_dump($productByBasketItem);
$prefilterCustom = array(
"ID" => $arElements,
);
\Bitrix\Main\Loader::includeModule('sale');
$arFields = [
'LID' => 's1',
'NAME' => 'Тест ядра33',
'ACTIVE_FROM' => '',
'ACTIVE_TO' => '',
'ACTIVE' => 'Y',
'SORT' => 100,
'PRIORITY' => 1,
'LAST_DISCOUNT' => 'Y',
'LAST_LEVEL_DISCOUNT' => 'N',
'XML_ID' => '',
'CONDITIONS' => [
'CLASS_ID' => 'CondGroup',
'DATA' => [
'All' => 'AND',
'True' => 'True',
],
'CHILDREN' => [
0 => [
'CLASS_ID' => 'CondBsktProductGroup',
'DATA' => [
'Found' => 'Found',
'All' => 'AND',
],
'CHILDREN' => [
'0' => [
'CLASS_ID' => 'CondBsktFldProduct',
'DATA' => [
'logic' => 'Equal',
'value' => '92',
]
]
]
]
]
],
'ACTIONS' => [
'CLASS_ID' => 'CondGroup',
'DATA' => [
'All' => 'AND',
],
'CHILDREN' => [
0 => [
'CLASS_ID' => 'ActSaleBsktGrp',
'DATA' => [
'Type' => 'Discount',
'Value' => 10,
'Unit' => 'Perc',
'Max' => 0,
'All' => 'AND',
'True' => 'True',
],
'CHILDREN' => []
]
]
],
'USER_GROUPS' => [1]
];
CSaleDiscount::Add($arFields);
Возвращается объект CIBlockResult. Пользовательские поля не возвращаются.
для вывода пользовательских свойств обязательно должен быть передан IBLOCK_ID и в arSelect код необходимых свойств UF_XXX. Если необходимо вывести все пользовательские свойства, то в arSelect необходимо передать UF_*.
$imageId = 1;
$arImage = CFile::ResizeImageGet($imageId, array("width" => 10000, "height" => 520), BX_RESIZE_IMAGE_PROPORTIONAL_ALT, false);
.owl-item>div>div>a{
position: relative;
padding-top: 80%;
display: block;}
.owl-item>div>div>a>img{
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
object-fit: cover}
if($arResult['ITEMS']) {
$currentElement = current($arResult['ITEMS']);
$bPropertyBrandDisplay = isset($currentElement['DISPLAY_PROPERTIES']['BRAND']) ? true : false;
$bPropertyBrandLink = $bPropertyBrandDisplay && $currentElement['DISPLAY_PROPERTIES']['BRAND']['LINK_IBLOCK_ID'] ? true : false;
$brandsIblockId = $bPropertyBrandLink ? $currentElement['DISPLAY_PROPERTIES']['BRAND']['LINK_IBLOCK_ID'] : 0;
$brandsId = $brands = [];
if($bPropertyBrandDisplay && $bPropertyBrandLink) {
foreach($arResult['ITEMS'] as $arItem) {
$brandId = (int)$arItem['DISPLAY_PROPERTIES']['BRAND']['VALUE'];
if($brandId) {
$brandsId[] = $brandId;
}
}
if($brandsId) {
$brandsId = array_unique($brandsId);
$bShowBrandPicture = isset($arParams['SHOW_BRAND_PICTURE']) && $arParams['SHOW_BRAND_PICTURE'] == 'Y' ? true : false;
$order = ['ID' => 'ASC'];
$filter = ['IBLOCK_ID' => $brandsIblockId, 'ID' => $brandsId]; // Если надо добавляешь в фильтр активность элементов 'ACTIVE' => 'Y', 'GLOBAL_ACTIVE' => 'Y', 'ACTIVE_DATE' => 'Y'
$select = ['IBLOCK_ID', 'ID', 'NAME', 'DETAIL_PAGE_URL'];
if($bShowBrandPicture) {
$select = array_merge($select, ['PREVIEW_PICTURE', 'DETAIL_PICTURE']);
}
$result = CIBlockElement::GetList($order, $filter, false, false, $select);
while($row = $result->GetNext()) {
$row['PICTURE'] = [];
if($bShowBrandPicture) {
$pictureResize = ['width' => 120, 'height' => 40];
$pictureId = $row['PREVIEW_PICTURE'] ? $row['PREVIEW_PICTURE'] : $row['DETAIL_PICTURE'];
if($pictureId) {
$row['PICTURE'] = CFile::ResizeImageGet($pictureId, $pictureResize, BX_RESIZE_IMAGE_PROPORTIONAL_ALT, true);
$row['PICTURE']['ALT'] = $row['NAME'];
$row['PICTURE']['TITLE'] = $row['NAME'];
if($row['DETAIL_PICTURE']) {
$iProperty = new \Bitrix\Iblock\InheritedProperty\ElementValues($row['IBLOCK_ID'], $row['ID']);
$iPropertyValues = $iProperty->getValues();
if($iPropertyValues['ELEMENT_DETAIL_PICTURE_FILE_TITLE'])
$row['PICTURE']['TITLE'] = $iPropertyValues['ELEMENT_DETAIL_PICTURE_FILE_TITLE'];
if($iPropertyValues['ELEMENT_DETAIL_PICTURE_FILE_ALT'])
$row['PICTURE']['ALT'] = $iPropertyValues['ELEMENT_DETAIL_PICTURE_FILE_ALT'];
}
}
}
$brands[$row['ID']] = $row;
}
}
}
if($brands) {
foreach($arResult['ITEMS'] as &$arItem) {
$brandId = (int)$arItem['DISPLAY_PROPERTIES']['BRAND']['VALUE'];
if($brandId) {
$arItem['BRAND_ITEM'] = $brands[$brandId];
}
}
unset($arItem, $brands, $brandsId, $currentElement);
}
}
<?if($arItem['BRAND_ITEM']):?>
<div class="brand">
<meta itemprop="brand" content="<?=$arItem['BRAND_ITEM']['NAME']?>" />
<?if($arItem['BRAND_ITEM']['PICTURE']):?>
<a class="brand_picture" href="<?=$arItem['BRAND_ITEM']['DETAIL_PAGE_URL']?>">
<img src="<?=$arItem['BRAND_ITEM']['PICTURE']['src'];?>" alt="<?=$arItem['BRAND_ITEM']['PICTURE']['ALT']?>" title="<?=$arItem['BRAND_ITEM']['PICTURE']['TITLE'];?>" />
</a>
<?else:?>
<b class="block_title"><?=GetMessage('BRAND');?>:</b>
<a href="<?=$arItem['BRAND_ITEM']['DETAIL_PAGE_URL']?>"><?=$arItem['BRAND_ITEM']['NAME']?></a>
<?endif;?>
</div>
<?endif;?>
"SHOW_BRAND_PICTURE" => $arParams["SHOW_BRAND_PICTURE"],
// чтобы получить дату в формате сайта (в битриксе)
$date = date('Y-m-d');
$timestamp = MakeTimeStamp($date, 'YYYY-MM-DD');
$convertDateTime = ConvertTimeStamp($timestamp);
$arFilter = Array("IBLOCK_ID"=>16, "PROPERTY_ID_VK" => false, "ACTIVE" => "Y", ">=DATE_ACTIVE_FROM" => $convertDateTime);
\Bitrix\Main\Loader::includeModule('iblock');
$propertyValuesIdByXmlId = $elementPropertyValuesById = [];
$iblockId = 17;
$elementId = 176;
$propertyCode = 'HIT';
$deletePropertyValuesXmlId = ['NEW'];
$iterator = \Bitrix\Iblock\PropertyEnumerationTable::getList([
'select' => ['*'],
'filter' => ['PROPERTY.IBLOCK_ID' => $iblockId, 'PROPERTY.CODE' => $propertyCode]
]);
while($row = $iterator->fetch()) {
$propertyValuesIdByXmlId[$row['XML_ID']] = $row['ID'];
}
$dbRes = CIBlockElement::GetList([], ['IBLOCK_ID' => $iblockId, 'ID' => $elementId], false, false, ['IBLOCK_ID', 'ID', 'PROPERTY_'.$propertyCode]);
while($arRes = $dbRes->Fetch()) {
$value = $arRes['PROPERTY_'.$propertyCode.'_VALUE'];
$valueId = $arRes['PROPERTY_'.$propertyCode.'_ENUM_ID'];
$elementPropertyValuesById[$valueId] = $value;
}
if($elementPropertyValuesById) {
foreach($deletePropertyValuesXmlId as $xmlId) {
$deletePropertyValueId = $propertyValuesIdByXmlId[$xmlId];
if(isset($elementPropertyValuesById[$deletePropertyValueId])) {
unset($elementPropertyValuesById[$deletePropertyValueId]);
}
}
CIBlockElement::SetPropertyValuesEx($elementId, $iblockId, [$propertyCode => array_keys($elementPropertyValuesById)]);
}
$arJsParams = array(
"leftSlider" => 'left_slider_'.$key,
// .............
// добавляешь свой параметр, например step (значение = шаг)
"step" => 100
);
var SmartFilter = function(arParams)
{
if (typeof arParams === 'object')
{
this.leftSlider = BX(arParams.leftSlider);
// ...........
// где-нибудь здесь добавляешь
this.step = arParams.step || 1;
}
};
SmartFilter.prototype.recountMinPrice = function()
{
var newMinPrice = (this.priceDiff*this.leftPercent)/100;
newMinPrice = (this.minPrice + newMinPrice).toFixed(this.precision);
// добавляешь эту строку
newMinPrice = Math.round(newMinPrice/this.step) * this.step;
if (newMinPrice != this.minPrice)
this.minInput.value = newMinPrice;
else
this.minInput.value = "";
/** @global JCSmartFilter smartFilter */
smartFilter.keyup(this.minInput);
};
SmartFilter.prototype.recountMaxPrice = function()
{
var newMaxPrice = (this.priceDiff*this.rightPercent)/100;
newMaxPrice = (this.maxPrice - newMaxPrice).toFixed(this.precision);
// добавляешь эту строку
newMaxPrice = Math.round(newMaxPrice/this.step) * this.step;
if (newMaxPrice != this.maxPrice)
this.maxInput.value = newMaxPrice;
else
this.maxInput.value = "";
/** @global JCSmartFilter smartFilter */
smartFilter.keyup(this.maxInput);
};
$arParams = $component->applyTemplateModifications();
if($arResult['OFFERS']) {
$colorPropertyCode = 'COLOR_REF';
foreach($arResult['OFFERS'] as $key => $offer) {
$colors = $arResult['SKU_PROPS'][$colorPropertyCode]['VALUES'];
$offerColorXmlId = $offer['PROPERTIES'][$colorPropertyCode]['VALUE'];
$offerColorImage = [];
foreach($colors as $color) {
if($color['XML_ID'] == $offerColorXmlId) {
if(is_array($color['PICT']) && $color['PICT']['SRC']) {
$offerColorImage = $color['PICT'];
}
break;
}
}
if($offerColorImage) {
++$arResult['OFFERS'][$key]['MORE_PHOTO_COUNT'];
array_unshift($arResult['OFFERS'][$key]['MORE_PHOTO'], $offerColorImage);
++$arResult['JS_OFFERS'][$key]['SLIDER_COUNT'];
array_unshift($arResult['JS_OFFERS'][$key]['SLIDER'], $offerColorImage);
}
}
}
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler('sale', 'OnSaleOrderBeforeSaved', ['OrderEvents', 'onBeforeOrderSaveHandler']);
class OrderEvents {
public static function onBeforeOrderSaveHandler(\Bitrix\Main\Event $event) {
$order = $event->getParameter('ENTITY');
$shipmentCollection = $order->getShipmentCollection();
foreach($shipmentCollection as $shipment) {
if(!$shipment->isSystem())
$shipment->setBasePriceDelivery(0, false);
}
}
}