Свой обработчик вывода поля в списке
Значение поля можно показать по-своему — датой в нужном формате, ссылкой, значком, подписью вместо кода.
Метод под конкретное поле
Контроллер ищет метод с именем поля: для поля ACTIVE это getRowFieldACTIVEViewData().
public function getRowFieldACTIVEViewData($rowId, $fieldId, array $row)
{
return $row['ACTIVE'] === 'Y' ? 'да' : 'нет';
}
public function getRowFieldDATE_CREATEViewData($rowId, $fieldId, array $row)
{
return FormatDate('d F Y H:i', MakeTimeStamp($row['DATE_CREATE']));
}
Метод получает идентификатор строки, имя поля и всю строку целиком — значит может показать значение, собранное из нескольких полей.
Ничего регистрировать не нужно: список сам проверяет, есть ли такой метод, и зовёт его вместо обычного вывода.
Своё поле ввода при правке
Для правки в строке есть парный метод — getRowField<ИМЯ ПОЛЯ>EditData(). Он возвращает разметку
поля ввода:
public function getRowFieldACTIVEEditData($rowId, $fieldId, array $row): string
{
return '<select name="' . $fieldId . '">'
. '<option value="Y"' . ($row['ACTIVE'] === 'Y' ? ' selected' : '') . '>да</option>'
. '<option value="N"' . ($row['ACTIVE'] === 'N' ? ' selected' : '') . '>нет</option>'
. '</select>';
}
Свой класс колонки
Когда вывод сложнее пары строк или нужен на нескольких списках, заводят класс колонки —
наследника DevBx\Core\UI\Columns\Column — и подставляют его в getColumnClass():
public function getColumnClass(string $fieldId, \Bitrix\Main\ORM\Fields\Field $field = null): ?string
{
if ($fieldId === 'PRICE') {
return \Vendor\Module\UI\Columns\PriceColumn::class;
}
return parent::getColumnClass($fieldId, $field);
}
В модуле уже есть готовые колонки, которые стоит посмотреть перед тем, как писать свою:
FileColumn — файл, UserColumn — пользователь, SiteColumn — сайт, UserFieldColumn —
пользовательское поле.
Что было раньше
Старый список принимал массив ROW_VIEW с замыканиями на каждое поле. Метод контроллера читается
лучше: имя поля видно в названии метода, и вывод можно переопределить в наследнике списка, не
трогая исходный.