1. Работа с группами пользователей в старом ядре Bitrix
В старом ядре Bitrix для работы с группами пользователей используется класс CGroup.
Получение списка групп пользователей:
$arGroups = [];
$rsGroups = CGroup::GetList(($by="c_sort"), ($order="asc"));
while ($arGroup = $rsGroups->Fetch()) {
$arGroups[] = $arGroup;
}
print_r($arGroups);
$groupId = 1; // ID группы
$arGroup = CGroup::GetByID($groupId)->Fetch();
print_r($arGroup);
$group = new CGroup;
$arFields = [
"ACTIVE" => "Y",
"C_SORT" => 100,
"NAME" => "Новая группа",
"DESCRIPTION" => "Описание группы",
"STRING_ID" => "new_group",
];
$newGroupId = $group->Add($arFields);
if (intval($newGroupId) > 0) {
echo "Группа успешно добавлена с ID: " . $newGroupId;
} else {
echo "Ошибка добавления группы: " . $group->LAST_ERROR;
}
$groupId = 2;
$group = new CGroup;
$arFields = [
"NAME" => "Обновленное название группы",
];
$group->Update($groupId, $arFields);
$groupId = 3;
CGroup::Delete($groupId);
2. Работа с группами пользователей в новом ядре D7
В новом ядре D7 используется пространство имен Bitrix\Main\GroupTable.
Подключение модуля и пространства имен:
use Bitrix\Main\Loader;
use Bitrix\Main\UserTable;
use Bitrix\Main\GroupTable;
Loader::includeModule('main');
use Bitrix\Main\GroupTable;
$groups = GroupTable::getList([
'select' => ['ID', 'NAME', 'STRING_ID', 'ACTIVE', 'C_SORT'],
'order' => ['C_SORT' => 'ASC']
])->fetchAll();
print_r($groups);
$groupId = 1;
$group = GroupTable::getById($groupId)->fetch();
print_r($group);
$result = GroupTable::add([
'ACTIVE' => 'Y',
'C_SORT' => 100,
'NAME' => 'Новая группа D7',
'STRING_ID' => 'new_group_d7',
'DESCRIPTION' => 'Описание группы D7'
]);
if ($result->isSuccess()) {
echo "Группа добавлена с ID: " . $result->getId();
} else {
echo "Ошибка добавления группы: " . implode(', ', $result->getErrorMessages());
}
$groupId = 2;
$result = GroupTable::update($groupId, [
'NAME' => 'Обновленное название группы D7',
]);
if ($result->isSuccess()) {
echo "Группа обновлена успешно.";
} else {
echo "Ошибка обновления группы: " . implode(', ', $result->getErrorMessages());
}
$groupId = 3;
$result = GroupTable::delete($groupId);
if ($result->isSuccess()) {
echo "Группа успешно удалена.";
} else {
echo "Ошибка удаления группы: " . implode(', ', $result->getErrorMessages());
}
3. Сравнение старого ядра и D7
- Старое ядро:
- Использует классы типа CGroup.
- Работает через массивы.
- Не поддерживает ORM.
- Новое ядро D7:
- Использует ORM (Object-Relational Mapping).
- Более структурированный код.
- Поддерживает фильтрацию, сортировку и выборку данных с использованием getList().
5. Рекомендации
- Если разрабатывается новый функционал, лучше использовать D7, так как это современный и более производительный подход.
- В старых проектах для совместимости можно использовать CGroup, но с переходом на GroupTable в долгосрочной перспективе.