Столкнулся с тем, что в модуле выгрузки отсутствует эта опция. В планах реализации у Битрикс ее нет, а жить как то надо. Умный фильтр не умеет фильтровать по наличию товара в торговых предложениях. Получаем кучу лишнего в выдаче. Более того, логика у новой выгрузки другая и она подцепляет ВСЕ торговые предложения товара, если хоть одно торговое предложение есть на складе. Получаем кучу хлама в базе из за лишних ТП и длительную выгрузку на сайт.
Если у кого есть решение лучше, то поделитесь обязательно!
1. Деактивируем все торговые предложения, которые нельзя купить. И желательно уменьшить кол-во выгружаемых товаров из 1с. Сами понимаете, такой костыль создает доп.нагрузку.
2. Добавляем дополнительный фильтр в страницу каталога и поиска.
Получаем актуальные товары в каталоге.
Если у кого есть решение лучше, то поделитесь обязательно!
1. Деактивируем все торговые предложения, которые нельзя купить. И желательно уменьшить кол-во выгружаемых товаров из 1с. Сами понимаете, такой костыль создает доп.нагрузку.
| Код |
|---|
AddEventHandler("catalog", "OnSuccessCatalogImport1C", Array("Divasoft1C", "DeactivateOffersAfterImport"));
class Divasoft1C {
function DeactivateOffersAfterImport(){
if(strpos($_REQUEST['filename'], 'rests') !== false) {
CModule::IncludeModule("iblock");
$el = new CIBlockElement;
$res = CIBlockElement::GetList(array(), array("IBLOCK_ID" => 14,"ACTIVE"=>"Y","CATALOG_AVAILABLE"=>"N"), false, array("nPageSize"=>7000), array("ID"));
while ($ob = $res->GetNext()) {
$el->Update($ob['ID'], array("ACTIVE"=>"N"));
}
}
}
} |
2. Добавляем дополнительный фильтр в страницу каталога и поиска.
| Код |
|---|
global $arrFilter;
$arSubQuery = array("=CATALOG_AVAILABLE" => "Y");
$arrFilter[] = array(
'LOGIC' => 'OR',
array(
'ID' => CIBlockElement::SubQuery('PROPERTY_CML2_LINK', $arSubQuery),
),
array(
"LOGIC" => "AND",
array('OFFERS' => NULL),
array('=CATALOG_AVAILABLE' => "Y"),
),
); |
Получаем актуальные товары в каталоге.