Инфоблоки, инструменты

Теперь администрирование сайта стало простым как никогда, благодаря легким в использовании и надежным инструментам.
Вы можете несколькими кликами мыши скопировать элемент прямо в списке, переместить его в другой инфоблок или «отвязать» от раздела. И это лишь малая часть возможностей модуля. Просто установите его и Вы получите доступ к следующим улучшениям:
- Возможность копирования и перемещения элементов между инфоблоками
- Удобное перемещение между ячейками в новых инфоблоках
- Возможности копирования различных элементов в рамках одного инфоблока
- Опция «отвязать от текущего раздела».
- Типы свойств «Простой чекбокс» и «Палитра»
- Кнопка просмотра элемента в публичной части.
- Экспорт и импорт свойств инфоблока. А также формы элемента и секции.
- Пользовательские свойства инфоблоков
- Удобное управление чекбоксами списков.
- Переключатель режима просмотра элементов в одном инфоблоке
Удобное управление чекбоксами

Наверняка вы знаете о такой удобной функции: выделить мышью один чекбокс, нажать shift, кликнуть на второй и все чекбоксы между ними тоже помечаются как выделенные. Благодаря модулю Инфоблоки. Инструменты. теперь эта функция доступна и в 1С-Битрикс.
Копирование и перенос
копировать в списке

копировать и переместить

привязать к разделу
Как часто перед вами стоит задача скопировать или переместить элемент в другой раздел, или в соседний инфоблок?
С функционалом модуля Инфоблоки. Инструменты. вы можете копировавать элементы в рамках одного инфоблока прямо в списке, перемещать элементы между инфоблоками, копировать свойства инфоблоков за несколько кликов мыши.
Все действия интуитивно понятны. Например, для того, чтобы переместить элементы в конкретный раздел инфоблока-преемника, отметьте галочкой нужный элемент, в меню «Действия» выберите «переместить в другой ИБ», укажите инфоблок и раздел.

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

Аналогичным образом вы можете привязать элемент к любому разделу внутри инфоблока: в меню «Действия» выберите пункт «добавить привязку к разделу» и укажите раздел.
Отвязать от раздела
Еще одна удобная опция — «oтвязать от текущего раздела». Подходит, когда необходимо исключить некоторые элементы из раздела «Распродажа», к примеру.

Перемещение по ячейкам

Помимо копирования и перемещения модуль позволяет быстро перескакивать по полотну полей. В режиме редактирования нажмите Ctrl и стрелками перемещайтесь по полотну в любую сторону:
Свойства инфоблоков

Предусмотрены пользовательские свойства для элементов и секций, но порой не хватает пользовательских свойств самих инфоблоков. Например, чтобы хранить там дополнительные настройки. Эта задача также решена в рамках модуля Инфоблоки. Инструменты.
Функция привычно проста в использовании. После установки модуля в разделе редактирования инфоблока появляется вкладка «Доп. поля», в которой вы можете создавать, добавлять, изменять, удалять свойства. На данный момент свойства сквозные для всех инфоблоков, то есть, если свойство создано в одном — оно будет доступно для всех. Для того, чтобы получить значение полей для конкретного инфоблока, используем следующую функцию:
if (Cmodule::IncludeModule(‘asd.iblock’))
и получаем массив
Array ( [UF_ASD_TPL_INSERT] => текст [UF_TEST] => 1000 [UF_TESTLIST] => Array ( [2] => раз [3] => два [4] => три ) )
Просмотр элементов

Переключение режима просмотра

Новые типы свойств
простой чекбокс

Как знают разработчики, даже для обычного чекбокса да/нет, надо создавать свойство типа «список», которое имеет как минимум два минуса: дополнительный запрос при выборке и неудобство установки чекбокса в положение «вкл». Поэтому, продвинутые разработчики использовали замену чекбоксу, заводя просто тип свойства «строка», куда писали Y/N, подразумевая, что это и есть чекбокс. Вариант, конечно, работоспособный, но неудобен для пользователей: ваш контент-редактор должен держать в голове, что Y — это «да», N — это «нет».
Решение — и есть новый тип свойства «простой чекбокс».
Простой чекбокс
Новый тип свойства — «простой чекбокс» базируется на строке, и сохраняет у себя значения Y/N для чекбокса-строки (сделано лишь для совместимости со старыми версиями) или 1/0 для (рекомендуется как более быстрое для поиска)

И вот это свойство мы можем уже просто ставить в положение вкл.
CIBlockElement::SetPropertyValueCode(38398, 'CHECK_STR', 'Y');//для строки CIBlockElement::SetPropertyValueCode(38398, 'CHECK_INT', 1);//для числа
CIBlockElement::SetPropertyValueCode(38398, 'CHECK_STR', 'N');//для строки CIBlockElement::SetPropertyValueCode(38398, 'CHECK_INT', 0);//для числа
и очень просто без доп.запроса фильтровать по нему:
CIBlockElement::GetList(array(), array('=PROPERTY_CHECK_STR' => 'Y'));//по строке CIBlockElement::GetList(array(), array('=PROPERTY_CHECK_INT' => 1));//по числу
Естественно, поддерживается и фильтрация по нему:

Обращу ваше внимание, что в базе значение всегда хранится как Y/N для строки или как 1/0 для числа (сохранение и фильтр показаны выше). Менять это нельзя, можно менять только визуальное представление включенного и выключенного положения (в настройках конкретного свойства):

Получаем в итоге:

Ну и последнее. Если у вас уже есть такое простое текстовое свойство с положениями Y/N (или числовое с 1/0), вы безбоязненно можете изменить у него тип свойства на «Простой чекбокс», все продолжит работать.
Палитра
Еще один тип новый тип свойства «Палитра» будет по достоинству оценен при работе с графикой.
Битрикс API – копирование свойств и элементов
Сегодня вы узнаете как написать скрипт для битрикса, который помогает скопировать свойство элемента инфоблока.
Как скопировать свойство в Битриксе
Для чего это может пригодиться? Например, когда вам надо сделать копию свойства, но вы не хотите испортить актуальные данные и что-нибудь сломать.
Любой скрипт начинается с подключения пролога и модуля инфоблока:
Не скажу, что следующие строки везде хорошо работают, но на всякий случай напишу их, они снимают ограничения по времени и памяти выполнения скрипта. Полезно, когда у вам много элементов инфоблока:
@set_time_limit(99600); ini_set("memory_limit", "4096M"); ini_set("max_execution_time", "0"); ini_set("max_input_time", "0");
После этого пишем код:
$res = CIBlockElement::GetList( array(), array('IBLOCK_ID' => 1), false, false, array('PROP_FROM_OLD') ); while($el = $res->GetNextElement())< $fields = $el->GetFields(); //тут введите код свойство которое копируется $from = $el->GetProperty('PROP_FROM_OLD'); //обновляем свойство CIBlockElement::SetPropertyValuesEx( $fields['ID'], //ID обновляемого элемента 14, //ID инфоблока array('PROP_TO_NEW' => $from['VALUE']) //код обновляемого свойства ); >
Получаем значение, и записываем его в новое свойство, которое нужно создать в инфоблоке. Полный скрипт выглядит так:
1), false, false, array('PROP_FROM_OLD') ); while($el = $res->GetNextElement())< $fields = $el->GetFields(); //тут введите код свойство которое копируется $from = $el->GetProperty('PROP_FROM_OLD'); //обновляем свойство CIBlockElement::SetPropertyValuesEx( $fields['ID'], //ID обновляемого элемента 14, //ID инфоблока array('PROP_TO_NEW' => $from['VALUE']) //код обновляемого свойства ); >
PROP_FROM_OLD и PROP_TO_NEW – символьные коды. Не забывайте менять свой ID инфоблока.
Как скопировать элементы в 1С-Битрикс
Если свойств несколько и вам нужно пересоздать элементы относительно другого инфоблока, то вам поможет данный скрипт:
8, "ACTIVE" => "Y"), false, false, Array('ID', 'NAME', 'PROPERTY_HOURS', 'PROPERTY_MINUTES', 'ACTIVE_FROM') ); while ($ar_fields = $rs->GetNext()) < echo ""; print_r($ar_fields); echo "
«; $el = new CIBlockElement; $PROP = array(); $PROP[7] = 1; // проект $PROP[8] = $ar_fields[‘PROPERTY_HOURS_VALUE’]; // часы $PROP[9] = $ar_fields[‘PROPERTY_MINUTES_VALUE’]; // минуты $arLoadProductArray = Array( «MODIFIED_BY» => $USER->GetID(), // элемент изменен текущим пользователем «IBLOCK_SECTION_ID» => false, // элемент лежит в корне раздела «IBLOCK_ID» => 3, «DATE_ACTIVE_FROM» => $ar_fields[‘ACTIVE_FROM’], «PROPERTY_VALUES»=> $PROP, «NAME» => $ar_fields[‘NAME’], «ACTIVE» => «Y», // активен ); if($PRODUCT_ID = $el->Add($arLoadProductArray)) echo «New ID: «.$PRODUCT_ID; else echo «Error: «.$el->LAST_ERROR; > endif; ?>
Как видите, из инфоблока с ID 8 мы создаем в инфоблоке с ID 3 новые элементы. Значения свойств берутся из старого инфоблока, или же, как было в моем случае, из инфоблока который “оказался не там” после XML выгрузки .
автор: Dmitriy
З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com
Читайте також:
Залишити відповідь Скасувати відповідь
Щоб відправити коментар вам необхідно авторизуватись.
Копирование элементов инфоблока вместе с файлами
К сожалению битрикс не умеет копировать элементы инфоблоков вместе с файлами, картинками анонса и детальной картинкой. Копируемый элемент создается с пустыми полями. А общение с тех. поддержкой битрикса выявило, что в документации сам процесс копирования элементов никак не описан, не описано, что копируется, а что нет и что вообще с этим делать.
Подходящих решений в маркетплейсе битрикса найти не удалось, а из блогов наиболее подходящую запись нашел только тут: https://odva.pro/blog/bitrix_copy_files/
Но в этом решении ID инфоблока и коды свойств прописаны хардокодом. Для более универсального решения я немного переписал скрипт и выкладываю тут:
use Bitrix\Main\EventManager; $eventManager = EventManager::getInstance(); $eventManager->addEventHandler('iblock', 'OnBeforeIBlockElementAdd', 'ClassElementImageCopy::OnBeforeIBlockElementAddHandler'); class ClassElementImageCopy < public static function OnBeforeIBlockElementAddHandler(&$arFields): void < if (!empty($_REQUEST['copyID']) && ($copyId = (int)$_REQUEST['copyID'])) < CModule::IncludeModule('iblock'); $product = CIBlockElement::GetByID($copyId)->fetch(); if (!empty($product['DETAIL_PICTURE'])) < $detailPicture = CFile::MakeFileArray(CFile::GetPath($product['DETAIL_PICTURE'])); $arFields['DETAIL_PICTURE'] = $detailPicture; > if (!empty($product['PREVIEW_PICTURE'])) < $previewPicture = CFile::MakeFileArray(CFile::GetPath($product['PREVIEW_PICTURE'])); $arFields['PREVIEW_PICTURE'] = $previewPicture; > $iblockId = $arFields['IBLOCK_ID']; $resProps = CIBlock::GetProperties($iblockId); $filesProp = []; while ($prop = $resProps->Fetch()) < if ($prop['PROPERTY_TYPE'] === 'F') < $filesProp[] = $prop; >> foreach ($filesProp as $prop) < $resProperty = CIBlockElement::GetProperty($iblockId, $copyId, ['ID' => 'ASC'], ['CODE' => $prop['CODE']]); while ($fileValue = $resProperty->GetNext()) < $file = CFile::MakeFileArray(CFile::GetPath($fileValue['VALUE'])); $arFields['PROPERTY_VALUES'][$prop['CODE']][] = [ 'VALUE' => $file, 'DESCRIPTION' => $fileValue['DESCRIPTION'] ?: '', ]; > if (!empty($arFields['PROPERTY_VALUES'][$prop['CODE']])) < CIblockElement::SetPropertyValues($arFields['ID'], $iblockId, $arFields['PROPERTY_VALUES'][$prop['CODE']], $prop['CODE']); > > > > >
Копируемы файлы появятся в элементе после нажатия на кнопки «Применить» или «Сохранить».
Как скопировать инфоблок Битрикс со свойствами?
Часто при разработке сайта возникает необходимость скопировать инфоблок Битрикса со свойствами, данная задача может показаться очень сложной. Как правило, требуется производить экспорт в XML, правку кода и импорт из обратно на сайт, что занимает огромное количество времени.
С данной задачей очень легко справляется готовый модуль копирования инфоблоков, очень простой в установке и удобный в использовании. С помощью модуля вы можете легко копировать любой информационный блок Битрикса со всеми его свойствами. Модуль позволяет
- Скопировать инфоблок
- Скопировать элементы инфоблока
- Скопировать все разделы и подразделы инфоблока
Помощь проекту
Привет, меня зовут Вика! Я являюсь автором сайта Weblim.
Если Вам помогла данная статья, вы можете отблагодраить меня перечислив любую денежную сумму. Заранее спасибо!


