10  /  12

Добавление редактируемых полей

Что бы добавить редактируемые поля в списке, в опциях есть ключ EDIT_FIELDS
его принцип работы такой же как у ROW_VIEW

ниже пример добавляет редактирование пользователей, для поиска пользователя используется системная функция FindUserID

<?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'));

$arEditFields = array(
    array('MODIFIED_BY','CREATED_BY', function (CAdminListRow $row, $primary, $key, $arRes) use (&$list) {
        $row->AddEditField($key, FindUserID($key, $arRes[$key], "", "form_".$list->getAdminList()->table_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();


Скриншот 30-09-2021 000356.jpg