Yandex Metrika
sanches.free

Новый highload-блок: запись блока и первого UF-поля через CUserTypeEntity

Две ступени конфигурации

Сначала фиксируют имя блока и физический префикс таблицы, затем добавляют схему UF. Идентификатор блока понадобится в строковом литерале ENTITY_ID: HLBLOCK_$id — без этого поле «не увидят» редакторы блока.

Добавление блока и обязательного строкового UF

use Bitrix\Highloadblock\HighloadBlockTable;
use CUserTypeEntity;
use Bitrix\Main\Loader;

Loader::includeModule('highloadblock');

$tableBootstrap = HighloadBlockTable::add([
    'NAME' => 'PromoStickerVault',
    'TABLE_NAME' => 'promo_sticker_vault',
]);
if (!$tableBootstrap->isSuccess()) {
    throw new \RuntimeException(implode('; ', $tableBootstrap->getErrorMessages()));
}
$vaultId = (int) $tableBootstrap->getId();

$descriptor = new CUserTypeEntity();
$labelBundle = [
    'EDIT_FORM_LABEL',
    'LIST_COLUMN_LABEL',
    'LIST_FILTER_LABEL',
];
$arFieldsPulse = [
    'ENTITY_ID' => 'HLBLOCK_' . $vaultId,
    'FIELD_NAME' => 'UF_MARKER_TEXT',
    'USER_TYPE_ID' => 'string',
    'XML_ID' => '',
    'SORT' => '100',
    'MULTIPLE' => 'N',
    'MANDATORY' => 'Y',
    'SHOW_FILTER' => 'E',
    'SETTINGS' => [
        'DEFAULT_VALUE' => '',
        'SIZE' => '60',
        'ROWS' => '1',
        'MIN_LENGTH' => '1',
        'MAX_LENGTH' => '240',
        'REGEXP' => '',
    ],
];
foreach ($labelBundle as $labelKey) {
    $arFieldsPulse[$labelKey]['ru'] = 'Маркер промо-строки';
    $arFieldsPulse[$labelKey]['en'] = 'Promo marker';
}
$markerFieldKey = $descriptor->Add($arFieldsPulse);
if (!$markerFieldKey) {
    global $APPLICATION;
    throw new \RuntimeException((string) $APPLICATION->GetException());
}

После сохранения

Перегенерируйте ORM-хелпер блока там, где в проектной дисциплине нужен файл с классом данных, очистите кеш справочника настроек и проверьте уникальность TABLE_NAME между разными установками, если дампы накатывают скриптом.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии