Документация

Свой обработчик вывода поля в списке

Значение поля можно показать по-своему — датой в нужном формате, ссылкой, значком, подписью вместо кода.

Метод под конкретное поле

Контроллер ищет метод с именем поля: для поля ACTIVE это getRowFieldACTIVEViewData().

php · ElementList.php
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(). Он возвращает разметку поля ввода:

php
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():

php
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 с замыканиями на каждое поле. Метод контроллера читается лучше: имя поля видно в названии метода, и вывод можно переопределить в наследнике списка, не трогая исходный.