Июнь. Я стоял в одних труселях на балконе и с третьего этажа лицезрел течение жизни в нашем дворе. Дядя Толик с утра был пьян и с улыбкой на лице наслаждался утренней свежестью. Тетя Галя в компании таких же крупных женщин как она, оживленно обсуждали девушку, что прошла мимо них. На ней (имею ввиду девушку,а не тетю Галю) был короткий сарафан, и ее изумительно красивые ноги и не только , вдохновляли меня на написание кода также как заставляли тетю Галю и Ко обсуждать ее вид. Детвора словно бешеные носились туда сюда. В общем - лепота.
Наслаждение происходящим прервало сообщение от заказчика. Как обычно, что то сломалось и наотрез отказывалось работать. Конечно, всю работу описывать не будут, а напишу только скрипт, который получает данные в формате xml, и потом деактивирует те элементы что отсутствуют в битриксе.
Да, задач простая, согласен. Но нужно было что то написать в блоге.
Итак, вот он скрипт:
Наслаждение происходящим прервало сообщение от заказчика. Как обычно, что то сломалось и наотрез отказывалось работать. Конечно, всю работу описывать не будут, а напишу только скрипт, который получает данные в формате xml, и потом деактивирует те элементы что отсутствуют в битриксе.
Да, задач простая, согласен. Но нужно было что то написать в блоге.
Итак, вот он скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <?php header('Access-Control-Allow-Origin: *'); header('Content-Type: text/html; charset=utf-8'); set_time_limit(0); require($_SERVER["DOCUMENT_ROOT"]. "/bitrix/modules/main/include/prolog_before.php"); define("NO_KEEP_STATISTIC", true); CModule::IncludeModule("iblock"); /* получаем все элементы на сайте. */ $res = CIBlockElement::GetList([],['IBLOCK_ID' => 10, 'ACTIVE'=>'Y'], false); $codeIblockArr = []; while ($ar_res = $res->fetch()) { $codeIblockArr[] = $ar_res['CODE']; } /* получаем фид. и создаем массив с ID */ $url = 'https://bitrix.site.ru/local/php_interface/lib/Export/files/partner_163723.xml'; $codeFeedArr = []; $elements = new SimpleXMLElement(file_get_contents($url)); foreach ($elements->offer as $offer) { $internal_id = 'internal-id'; $id = $offer->attributes()->$internal_id; $codeFeedArr[] = $id; } /* Вычисялем какие элементы массива отсутсвтуют в другом массиве */ $diffArray = array_diff($codeIblockArr,$codeFeedArr); /* Деактивируем элементы */ $el = new CIBlockElement; foreach($diffArray as $codeElement){ $arFilter = Array("IBLOCK_ID" => 10, "CODE" => $codeElement); $res = CIBlockElement::GetList(Array(), $arFilter, false); if ($ar_res = $res->fetch()) { echo '<br> Деактивирован элемент с ID = '.$ar_res['ID'].''; $el->Update($ar_res['ID'], ['ACTIVE'=>'N']); } else { echo '<br><b style="color:red"> не найден '.$codeElement.'</b>'; } } |
Приветствую! Полезная информация.
ОтветитьУдалитьПравда в настройках модуля обмена Битрикс есть возможность деактивации или удаления элементов не попавших в выгрузку. Или это относится только к обмену с 1С?
Привет. Да, при обмене с 1С деактивация/удаление выполняется автоматически.
Удалить