Как удалить инфоблок битрикс
Перейти к содержимому

Как удалить инфоблок битрикс

  • автор:

Скрипт удаления элементов Битрикс

Логика скрипта (скачать):
1) Задаём set_time_limit
2) Включаем вывод ошибок
3) Подключаем prolog bitrix
4) Подключаем нужный модуль iblock
5) Вытаскиваем элементы
6) Собираем ID-шники
7) Делаем перебор массива ID-шников и удаляем элементы

set_time_limit(60000); // включаем вывод ошибочек ini_set(‘error_reporting’, E_ALL); ini_set(‘display_errors’, 1); ini_set(‘display_startup_errors’, 1); // включаем замер исполнения скрипта // подключаем prolog bitrix require $_SERVER[«DOCUMENT_ROOT»] . ‘/bitrix/modules/main/include/prolog_before.php’; // подключаем нужные модули CModule::IncludeModule(«iblock»); $infoblock = 3; // Инфоблок с ID ХХХ (необходимо установить ID нужного инфоблока) //Вытаскиваем элементы $arSelectElems = array ( «ID» ); $arFilterElems = array ( «IBLOCK_ID» => $infoblock ); $arSortElems = array ( «NAME» => «ASC» ); $arResult[«ELEMENTS»] = array(); $rsElementElement = CIBlockElement::GetList(array(‘left_margin’ => ‘asc’), $arFilterElems, false, false, $arSelectElems); while ( $ar_Element = $rsElementElement->Fetch() ) < $ar_Resu[] = array( // собираем массив того, что нам нужно 'ID' =>$ar_Element[‘ID’], // id ); > //Удаляем элементы foreach ($ar_Resu as $section)

Ещё статьи:

25.02.2024 Какие показатели обеспечивает антибот для защиты сайта от накруток?
Какие показатели обеспечивает антибот для защиты сайта от SEO накруток и есть ли в этом какая-то эффективность?
Часто у заказчиков возникают такие вопросы, и первым делом нужно определить критерии по которым оценивать эффективность. ID: 467

08.11.2023 Прощай bitrix.xscan, не стало битрикс скан модуля
Сегодня увидел, что полезного модуля bitrix.xscan не стало на маркетплейсе. ID: 464

26.07.2023 Сохренение ютм меток в сессию
Вариант сохренения ютм меток в сессию в афйле init.php ID: 462

Как удалить файл в свойстве элемента инфоблока?

Сабж. Казалось просто. А вот и ни фига. Есть камни, о которые новичок порвет мозг. Мне стыдно, но я убил часа полтора. Резюмирую здесь, надеюсь это последний раз у всех нас.

Итак, как нам обновить вообще любое св-во в Битрикс?
1. Update
2. SetPropertyValues
3. SetPropertyValuesEx

В каждом варианте на ключ массива обновления идет код св-ва, а значение — новое значение. Для удаления файла нам надо передать вот такой простой массивчик:
array(‘MY_FILE’ => array(‘XXX’ => array(‘del’ => ‘Y’)));

Да, вот такой геморрой. Он универсален, что для ИБ, что для ИБ+, что для документооборота. MY_FILE — это код вашего св-ва типа файл. А что такое ХХХ? Настоящая порнография. Там содержится _ID_ _значения_ св-ва. То есть не ID св-ва, а именно ID значения. И магия еще в том, что в случае ИБ+ у нас нет такого понятия, а ID значения формируется как ID_элемента:ID_свва. Но вам это знать необязательно, лучше получить универсально.

CModule::IncludeModule('iblock'); $IB = 24; $ID = 220304; $CODE = 'ONE_FL'; if ($arProp = CIBlockElement::GetProperty($IB, $ID, 'ID', 'DESC', array('CODE' => $CODE))->fetch()) < $XXX = $arProp['PROPERTY_VALUE_ID']; CIBlockElement::SetPropertyValueCode($ID, $CODE, array($XXX =>array('del' => 'Y'))); >

Вот таким образом получается этот универсальный XXX, именно так его и надо передавать для каждого файла, который мы хотим удалить.

Что делать в случае множественного файла? Как удалить конкретный файл в списке? Все просто — используем в примере выше не if, а while, ну и дополнительно фильтруем, какой файл надо удалить.

1С-Битрикс. Как массово и достаточно быстро удалить все разделы в инфоблоке?

Добрый день!
Подскажите пожалуйста как массово и достаточно быстро удалить все разделы в инфоблоке?
Всего разделов 55к
Через админку всё виснет, несмотря на больше max execution time.

Скрипт такой набросал, но как-то долговато работает.. Или это норма?

 'asc'), array('IBLOCK_ID' => $infoblock)); while ( $ar_Section = $rs_Section->Fetch() ) < $ar_Resu[] = array( // собираем массив того, что нам нужно 'ID' =>$ar_Section['ID'], // id раздела 'NAME' => $ar_Section['NAME'], // имя раздела (что нас, собственно, интересует) 'IBLOCK_SECTION_ID' => $ar_Section['IBLOCK_SECTION_ID'], ); > foreach ($ar_Resu as $section) < CIBlockElement::Delete($section["ID"]); >?>
  • Вопрос задан более трёх лет назад
  • 7830 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 4

winer

занимаюсь разработкой сайтов на 1c-bitrix

При большом количестве разделов (30к+), Bitrix начинает вставлять палки в колеса как разработчику, так и пользователю, который будет работать с такими ИБ.
— Списки элементов ИБ будут безбожно тормозить в интерфейсе. На каждом хите будет добавляться фильтр по разделу.
— Редактировать их становится очень затруднительно, опять же из за долгой загрузки интерфейса и большого времени изменения.

Всё это из за того что разделы это NESTED SETS деревья. При добавлении/удалении раздела происходит вычисление LEFT_MARGIN и RIGHT_MARGIN для каждого раздела во всем инфоблоке.

Для добавления и обновления (CIBlockSection::Add, CIBlockSection::Update) есть параметр метода $bResort, который позволяет отключить этот перерасчёт в момент их выполнения.
Только после этого ОБЯЗАТЕЛЬНО надо выполнять CIBlockSection::Resort.

Это можно использовать при большом количестве операций Update и Add. Сначала выполняете все операции Update и Add с $bResort=false, а после них CIBlockSection::Resort

  • пересчет границ NESTED SETS,
  • CIblockElement::GetList (поиск вложенных элементов)
  • CIblockElement::Delete (если в разделе были элементы),
  • Запрос к таблице которая хранит множественные привязки элемента к разделам (поиск значений и их удаление)
  • CIBlockSection::GetList (поиск вложенных разделов)
  • CIBlockSection::Delete (удаление вложенных разделов)
  • Переиндексирование поиска
  • Запросы к UF_* полям раздела (поиск значений и их удаление)
  • При заполненных SEO полях, запросы к таблицам которые их хранят (поиск значений и их удаление)
  • При расширенном управлении правами это еще запросы к таблицам которые хранят эти настройки (поиск значений и их удаление)

и это скорее всего не полный список, а только то что могу назвать по памяти.

Нельзя быстро удалить разделы стандартным API без написания своих запросов к БД которые проделают всё что описано выше. В идеале надо взять код стандартного CIBlockSection::Delete, внимательно его изучить и написать свой метод который будет с помощью прямых запросов делать тоже самое, но оптимально.

Если же вопрос стоит в том чтобы удалить эти разделы за ЛЮБОЕ количество времени, тогда можно написать страничку с пошаговым удалением разделов, через ajax запросы. Причем надо учитывать, что вначале разделы будут удаляться ОЧЕНЬ медленно и ajax запрос может отвалиться по таймауту, поэтому надо будет за один шаг удалять пару разделов. А ближе к границе в 10к разделов, за один шаг можно будет удалять уже большее количество.

Пошаговое удаление элементов инфоблока

Пошаговое удаление элементов инфоблока

Данный модуль позволяет пошагово удалить все элементы инфоблока. Решение незаменимо, если приходится работать с большим числом данных, особенно на этапе разработки, отладки сайта, когда по той или иной причине не правильно загрузили данные. Подходит для сайта на любой редакции 1С-Битрикс.

Внимание! Данный модуль разработан с использованием апи D7.
Минимальные технические требования для продукта с версии 14.0 (с ядром D7):

  • PHP версии 5.3.
  • MySQL версии 5.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *