Created
March 31, 2022 06:55
-
-
Save luckydevilru/0282a812b5ff959889eedfcdc50cffd8 to your computer and use it in GitHub Desktop.
Bitrix D7 для инфоблоков
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<? | |
# Подключаем модуль: | |
\Bitrix\Main\Loader::includeModule('iblock'); | |
# Делаем запрос в таблицу элементов инфоблока | |
$dbItems = \Bitrix\Iblock\ElementTable::getList(array( | |
'order' => array('SORT' => 'ASC'), // сортировка | |
'select' => array('ID', 'NAME', 'IBLOCK_ID', 'SORT', 'TAGS'), // выбираемые поля, без свойств. Свойства можно получать на старом ядре \CIBlockElement::getProperty | |
'filter' => array('IBLOCK_ID' => 4), // фильтр только по полям элемента, свойства (PROPERTY) использовать нельзя | |
'group' => array('TAGS'), // группировка по полю, order должен быть пустой | |
'limit' => 1000, // целое число, ограничение выбираемого кол-ва | |
'offset' => 0, // целое число, указывающее номер первого столбца в результате | |
'count_total' => 1, // дает возможность получить кол-во элементов через метод getCount() | |
'runtime' => array(), // массив полей сущности, создающихся динамически | |
'data_doubling' => false, // разрешает получение нескольких одинаковых записей | |
'cache' => array( // Кеш запроса, почему-то в офф. документации об этом умалчивают | |
'ttl' => 3600, | |
'cache_joins' => true | |
), | |
)); | |
# Что можно сделать с $dbItems? | |
$dbItems->fetch(); // или $dbItems->fetchRaw() получение одной записи, можно перебрать в цикле while ($arItem = $dbItems->fetch()) | |
$dbItems->fetchAll(); // получение всех записей | |
$dbItems->getCount(); // кол-во найденных записей без учета limit, доступно если при запросе было указано count_total = 1 | |
$dbItems->getSelectedRowsCount(); // кол-во полученных записей с учетом limit | |
# В какие таблицы инфоблоков можно делать запросы | |
\Bitrix\Iblock\TypeTable::getList(); // типы инфоблоков | |
\Bitrix\Iblock\IblockTable::getList(); // инфоблоки | |
\Bitrix\Iblock\PropertyTable::getList(); // свойства инфоблоков | |
\Bitrix\Iblock\PropertyEnumerationTable::getList(); // значения свойств, например списков | |
\Bitrix\Iblock\SectionTable::getList(); // Разделы инфоблоков | |
\Bitrix\Iblock\ElementTable::getList(); // Элементы инфоблоков | |
\Bitrix\Iblock\InheritedPropertyTable::getList(); // Наследуемые свойства (seo шаблоны) | |
// и другие не особо используемые, таблицы свойств элементов нету | |
# Помимо getList можно использовать другие методы | |
add(array $data) // добавление элемента | |
addMulti($rows, $ignoreEvents = false) | |
checkFields(Result $result, $primary, array $data) // метод проверяет поля данных перед записью в БД. | |
delete($primary) // удаление элемента по ID | |
getById($id) // получение элемента по ID | |
getByPrimary($primary, array $parameters = array()) // метод возвращает выборку по первичному ключу сущности и по опциональным параметрам \Bitrix\Main\Entity\DataManager::getList. | |
getConnectionName() // метод возвращает имя соединения для сущности. 12.0.9 | |
getCount($filter = array(), array $cache = array()) // метод выполняет COUNT запрос к сущности и возвращает результат. 12.0.10 | |
getEntity() // метод возвращает объект сущности. | |
getList(array $parameters = array()) // получение элементов, подробнее было выше | |
getMap() // метод возвращает описание карты сущностей. 12.0.7 | |
getRow(array $parameters) // метод возвращает один столбец (или null) по параметрам для \Bitrix\Main\Entity\DataManager::getList. | |
getRowById($id) // метод возвращает один столбец (или null) по первичному ключу сущности. 14.0.0 | |
getTableName() // метод возвращает имя таблицы БД для сущности. 12.0.7 | |
query() // метод создаёт и возвращает объект запроса для сущности. | |
update($primary, array $data) // обновление элемента по ID | |
updateMulti($primaries, $data, $ignoreEvents = false) | |
enableCrypto($field, $table = null, $mode = true) // метод устанавливает флаг поддержки шифрования для поля. 17.5.14 | |
cryptoEnabled($field, $table = null) // метод возвращает true если шифрование разрешено для поля. 17.5.14 | |
# Всё это применимо и к другим модулям, только названия таблиц другие. Многое можно почерпнуть из файла /bitrix/modules/main/lib/orm/data/datamanager.php | |
# Примеры | |
# Инфоблок и его свойства | |
$arIblock = \Bitrix\Iblock\IblockTable::getList(array( | |
'filter' => array('CODE' => 'news'), | |
))->fetch(); | |
$arProps = \Bitrix\Iblock\PropertyTable::getList(array( | |
'select' => array('*'), | |
'filter' => array('IBLOCK_ID' => $arIblock['ID']) | |
))->fetchAll(); | |
# Значения определенного свойства типа список | |
$dbEnums = \Bitrix\Iblock\PropertyEnumerationTable::getList(array( | |
'order' => array('SORT' => 'asc'), | |
'select' => array('*'), | |
'filter' => array('PROPERTY_ID' => $arIblockProp['ID']) | |
)); | |
while($arEnum = $dbEnums->fetch()) { | |
$arIblockProp['ENUM_LIST'][$arEnum['ID']] = $arEnum; | |
} | |
# Элементы инфоблока и их свойства | |
$dbItem = \Bitrix\Iblock\ElementTable::getList(array( | |
'select' => array('ID', 'IBLOCK_ID', 'NAME'), | |
'filter' => array('IBLOCK_ID' => $arIblock['ID']), | |
'limit' => 100, | |
'order' => array('TIMESTAMP_X' => 'ASC') | |
)); | |
while ($arItem = $dbItem->fetch()) { | |
$dbProperty = \CIBlockElement::getProperty($arItem['IBLOCK_ID'], $arItem['ID'], array("sort", "asc"), array('CODE' => 'LINK_ARTICLES')); | |
while ($arProperty = $dbProperty->GetNext()) { | |
if ($arProperty['VALUE']) { | |
$arItem['LINK_ARTICLES'][] = $arProperty['VALUE']; | |
} | |
} | |
$arItems[] = $arItem; | |
} | |
# Количество заказов пользователя | |
$dbOrders = \Bitrix\Sale\Order::getList(array( | |
'filter' => array('USER_ID' => $userId), | |
'group' => array('COUNT' => 'USER_ID'), | |
'select' => array('CNT'), | |
'runtime' => array( | |
new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)') | |
) | |
)); | |
if ($arOrders = $dbOrders->fetch()) { | |
echo $arOrders['CNT']; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment