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 дней гарантии