Столкнулся с тем, что в модуле выгрузки отсутствует эта опция. В планах реализации у Битрикс ее нет, а жить как то надо. Умный фильтр не умеет фильтровать по наличию товара в торговых предложениях. Получаем кучу лишнего в выдаче. Более того, логика у новой выгрузки другая и она подцепляет ВСЕ торговые предложения товара, если хоть одно торговое предложение есть на складе. Получаем кучу хлама в базе из за лишних ТП и длительную выгрузку на сайт.
Если у кого есть решение лучше, то поделитесь обязательно!
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"), ), ); |
Получаем актуальные товары в каталоге.