За последние 24 часа нас посетили 21752 программиста и 1021 робот. Сейчас ищут 693 программиста ...

Сортировка с автоматическим обновлением данных.

Тема в разделе "PHP и базы данных", создана пользователем u_ksus, 19 апр 2022.

  1. u_ksus

    u_ksus Новичок

    С нами с:
    19 апр 2022
    Сообщения:
    1
    Симпатии:
    0
    Всем привет. Ребята, столкнулся с такой проблемой: есть некая база в 1с которая грузится на мой сайт, сайт на битриксе тема аспромакс, настроил сортировку товаров, как полагается, но по неясной мне причине сортировка не обновляется при обновление данных в 1с, то есть если в коде я указываю Y и N как пологающие наличие товара, то при изменение товара на складе код не обновляется и выдает старые значения. Может кто подсказать, как создать автоинкремент обновления?

    PHP:
    1. function set_available_region($ID, $IBLOCK_ID = 49)
    2. {
    3.     CModule::IncludeModule('aspro.max');
    4.     CModule::IncludeModule('iblock');
    5.     CModule::IncludeModule('catalog');
    6.    
    7.     $arRegions = CMaxRegionality::getRegions();// Получаем массив регионов
    8.    
    9.     $arProd = CCatalogProduct::GetByID($ID); // Получаем ифнормацию о товаре
    10.    
    11.     foreach ($arRegions as $regID => $arRegion) { // Идем по всем регионам
    12.  
    13.         // Получаем свойство в котором хранится флаг доступности для региона (в коде свойства сожержится ID региона из инфоблока)
    14.  
    15.         $rsProp = CIBlockProperty::GetList(array(), array('IBLOCK_ID' => $IBLOCK_ID, 'ACTIVE' => 'Y', 'CODE' => 'REGION_'.$regID.'_AVAILABLE'));
    16.         if(!$rsProp->SelectedRowsCount()) // Если свойство не создано - создадим
    17.         {
    18.             $arFields = Array(
    19.                 "NAME" => "Доступность в регионе - ".$arRegion['NAME'],
    20.                 "ACTIVE" => "Y",
    21.                 "SORT" => "600",
    22.                 "CODE" => 'REGION_'.$regID.'_AVAILABLE',
    23.                 "PROPERTY_TYPE" => "S",
    24.                 "IBLOCK_ID" => $IBLOCK_ID,
    25.             );
    26.             $ibp = new CIBlockProperty;
    27.               $PropID = $ibp->Add($arFields);
    28.         }
    29.        
    30.         CIBlockElement::SetPropertyValueCode($ID, 'REGION_'.$regID.'_AVAILABLE', "N"); // Сбрасываем для товара значение этого совйства на N
    31.        
    32.         if($arProd['TYPE'] == 1){ // Если товар простой (TYPE = 1) - сразу ищем по нужным складам
    33.            
    34.             // Находим информацию по наличию на складах которые отмечены у данного региона
    35.             $rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
    36.                 'filter' => array('=PRODUCT_ID'=>$ID,'=STORE.ACTIVE'=>'Y', 'STORE.ID' => $arRegion['LIST_STORES']),
    37.                 'select' => array('AMOUNT','STORE_ID','STORE_TITLE' => 'STORE.TITLE'),
    38.             ));
    39.            
    40.             while($arStoreProduct=$rsStoreProduct->fetch())
    41.             {
    42.                 if($arStoreProduct['AMOUNT'] > 0){ // если на складе больше 0 - сразу записываем что товар доступен и нет смысла больше искать по другим складам, прерываем цикл
    43.                     CIBlockElement::SetPropertyValueCode($ID, 'REGION_'.$regID.'_AVAILABLE', "Y");
    44.                     break;
    45.                 }
    46.             }
    47.         }elseif ($arProd['TYPE'] == 3){ // Если товар с торговыми предложениями
    48.  
    49.             $arTP = CCatalogSKU::getOffersList($ID, $IBLOCK_ID, array('ACTIVE' => 'Y')); // получаем список активных торговых предложений товара
    50.             $i = 0;
    51.             foreach (array_pop($arTP) as $tp_id => $arTPitem)
    52.             {
    53.                 $i++;
    54.                 // Находим информацию по наличию на складах которые отмечены у данного региона
    55.                 $rsStoreProduct = \Bitrix\Catalog\StoreProductTable::getList(array(
    56.                     'filter' => array('=PRODUCT_ID'=>$tp_id,'=STORE.ACTIVE'=>'Y', 'STORE.ID' => $arRegion['LIST_STORES']),
    57.                     'select' => array('AMOUNT','STORE_ID','STORE_TITLE' => 'STORE.TITLE'),
    58.                 ));
    59.                
    60.                 while($arStoreProduct=$rsStoreProduct->fetch())
    61.                 {
    62.                     if($arStoreProduct['AMOUNT'] > 0){ // если на складе больше 0 - сразу записываем что товар доступен и нет смысла больше искать по другим складам, прерываем цикл
    63.                         CIBlockElement::SetPropertyValueCode($ID, 'REGION_'.$regID.'_AVAILABLE', "Y");
    64.                         break;
    65.                     }
    66.                 }
    67.             }
    68.         }
    69.     }
    70. }