arrilot/bitrix-collectors

This package is abandoned and no longer maintained. No replacement package was suggested.
Maintainers

👁 Arrilot

Package info

github.com/arrilot/bitrix-collectors

pkg:composer/arrilot/bitrix-collectors

Statistics

Installs: 1 772

Dependents: 1

Suggesters: 0

Stars: 5

Open Issues: 0

0.2.1 2017-03-29 11:10 UTC

Requires

Requires (Dev)

None

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT eb047d793e05c048ec9f9d77906d831145cb26b7

  • Nekrasov Ilya <nekrasov.ilya90.woop@gmail.com>

bitrixcollectors

This package is auto-updated.

Last update: 2023-01-29 02:51:02 UTC


README

👁 Latest Stable Version

Данный пакет больше активно не поддерживается

Причина - мы больше не используем Битрикс в своих проектах. Если вам интересен этот проект и вы хотите заняться его поддержкой - форкните его и создайте Issue в данном репозитории чтобы мы поместили здесь ссылку на форк.

Мост для интеграции arrilot/collectors с Битриксом

Установка

composer require arrilot/bitrix-collectors

Использование

Основа - https://www.github.com/arrilot/collectors Пакет позволяет собрать из различных коллекций и элементов (обычно полученных через какой-нибудь CIblockElement::GetList()) идентификаторы и удобным образом дополучить по ним дополнительные данные одним запросом, а не в цикле как это обычно заканчивается

Данный мост реализует несколько наиболее востребованных в Битриксе коллекторов (collectors)

Готовые коллекторы:

  1. Arrilot\BitrixCollectors\FileCollector - импользует внутри себя FileTable::getList из d7
  2. Arrilot\BitrixCollectors\SectionCollector - SectionTable::getList
  3. Arrilot\BitrixCollectors\ElementCollector - CIBlockElement::GetList + Fetch. Рекомендуется использовать инфоблоки 2.0, чтобы не было проблем с множественными свойствами.
  4. Arrilot\BitrixCollectors\UserCollector - UserTable::getList

Абстрактные классы-коллекторы. От них можно наследоваться при разработке дополнительных танкеров.

  1. Arrilot\BitrixCollectors\TableCollector - для случая когда данные хранятся в отдельной таблице и для неё НЕТ d7 orm класса.
  2. Arrilot\BitrixCollectors\OrmTableCollector - для случая когда данные хранятся в отдельной таблице и ЕСТЬ d7 orm класс.

Также как и с оригинальным пакетом цепочка методов должна заканчиваться методом performQuery() который выполняем getList запрос в БД и возвращает результат. Можно одновременно собирать идентификаторы по нескольким коллекциям/элементам и т д.

Пример:

 use Arrilot\BitrixCollectors\FileCollector;

 $items = [
 ['ID' => 1, 'PROPERTY_FILES1_VALUE' => 1],
 ['ID' => 2, 'PROPERTY_FILES2_VALUE' => [2, 1]],
 ];
 
 $item = ['ID' => 3, 'PROPERTY_OTHER_FILES_VALUE' => 4];
 
 $collector = new FileCollector();
 $files = $collector->scanCollection($items, ['PROPERTY_FILES1_VALUE', 'PROPERTY_FILES2_VALUE'])
 ->scanItem($item, 'PROPERTY_OTHER_FILES_VALUE')
 ->performQuery();
 var_dump($files);

 // результат
 /*
 array:3 [▼
 1 => array:13 [▼
 "ID" => "1"
 "TIMESTAMP_X" => "2017-02-10 17:25:17"
 "MODULE_ID" => "iblock"
 "HEIGHT" => "150"
 "WIDTH" => "140"
 "FILE_SIZE" => "15003"
 "CONTENT_TYPE" => "image/png"
 "SUBDIR" => "iblock/b03"
 "FILE_NAME" => "avatar.png"
 "ORIGINAL_NAME" => "avatar-gs.png"
 "DESCRIPTION" => ""
 "HANDLER_ID" => null
 "EXTERNAL_ID" => "125dc3213f7ecde31124f3ebca7322b5"
 ],
 2 => array:13 [▼
 "ID" => "2"
 "TIMESTAMP_X" => "2017-02-10 17:31:30"
 "MODULE_ID" => "iblock"
 "HEIGHT" => "84"
 "WIDTH" => "460"
 "FILE_SIZE" => "4564"
 "CONTENT_TYPE" => "image/png"
 "SUBDIR" => "iblock/fcf"
 "FILE_NAME" => "4881-03.png"
 "ORIGINAL_NAME" => "4881-03.png"
 "DESCRIPTION" => ""
 "HANDLER_ID" => null
 "EXTERNAL_ID" => "35906df62694b4ed5f150c468a1f5d72"
 ]
 4 => array:13 [▼
 "ID" => "4"
 "TIMESTAMP_X" => "2017-02-10 17:33:30"
 "MODULE_ID" => "iblock"
 "HEIGHT" => "84"
 "WIDTH" => "460"
 "FILE_SIZE" => "4564"
 "CONTENT_TYPE" => "image/png"
 "SUBDIR" => "iblock/fc2"
 "FILE_NAME" => "test.png"
 "ORIGINAL_NAME" => "4881-03.png"
 "DESCRIPTION" => ""
 "HANDLER_ID" => null
 "EXTERNAL_ID" => "35906df62694b4ed5f150c468a1f5d53"
 ]
 ]
 */

Все коллекторы поддерживают ->select([...]), в котором можно указать массив $select, который передается в API битрикса. Аналогично в ->where(['...']) можно указать $filter Исключение - TableCollector. Там в ->where() нужно передавать строку, а не массив-фильтр. Она будет подставлена в sql запрос без дополнительный обработки.