Добавление/Удаление данных
Что бы появилась кнопка добавления нужно добавить опцию ALLOW_ADD
и для возможности удаления ALLOW_DELETE
ниже приведен пример с добавлением собственной функции удаления элемента,
в данном примере это приведено опять же из-за ограничений \Bitrix\Iblock\ElementTable
если достаточно стандартной функции Bitrix\Main\ORM\Data\DataManager::delete
устанавливать свой обработчик удаления не требуется.
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
Loader::includeModule("iblock");
Loader::includeModule("devbx.core");
$IBLOCK_ID = intval(\Bitrix\Main\Context::getCurrent()->getRequest()->get('IBLOCK_ID'));
$list = new DevBx\Core\Admin\AdminList('iblock', '\Bitrix\Iblock\ElementTable', array(
'ALLOW_EDIT' => 'Y',
'ALLOW_ADD' => 'Y',
'ALLOW_DELETE' => 'Y',
'HEADER_FIELDS' => array(
'ID',
'TIMESTAMP_X',
'MODIFIED_BY',
'DATE_CREATE',
'CREATED_BY',
'ACTIVE',
'ACTIVE_FROM',
'ACTIVE_TO',
'SORT',
'CODE',
'NAME',
),
'EDIT_FIELDS' => $arEditFields,
'FILTER_HEADER' => '<input type=hidden name="IBLOCK_ID" value="' . $IBLOCK_ID . '">',
));
$list->addFileEditParams('&IBLOCK_ID=' . $IBLOCK_ID);
$list->setActionGroupAddParams('&IBLOCK_ID=' . $IBLOCK_ID);
$list->setFilterFields(array(
'ID' => 'RANGE',
'TIMESTAMP_X' => 'RANGE',
'DATE_CREATE' => 'RANGE',
'ACTIVE',
'ACTIVE_FROM' => 'RANGE',
'ACTIVE_TO' => 'RANGE',
'SORT' => 'RANGE',
'CODE',
'NAME',
));
$list->setCallbackApplyFilter(function (&$arFilter, &$arFilterValues) use ($IBLOCK_ID) {
$arFilter['IBLOCK_ID'] = $IBLOCK_ID;
});
$list->setUpdateFunction(function ($ID, $arFields) {
$result = new \Bitrix\Main\Entity\UpdateResult();
$el = new CIBlockElement();
if (!$el->Update($ID, $arFields)) {
$result->addError(new \Bitrix\Main\Entity\EntityError($el->LAST_ERROR));
}
return $result;
});
$list->setCallbackAction('delete', function (\DevBx\Core\Admin\AdminList $list, $action, $arID, &$offset) {
global $APPLICATION;
$max_execution_time = 10;
$cnt = count($arID);
for (; $offset < $cnt; $offset++) {
$ID = $arID[$offset];
if (!CIBlockElement::Delete($ID)) {
$ex = $APPLICATION->GetException();
$list->getAdminList()->AddGroupError($ex->GetString(), $ID);
}
if ($max_execution_time > 0 && (microtime(true) - START_EXEC_TIME) > $max_execution_time)
return true;
}
return false;
});
$list->display();