OctoberCMS. Добавление accessor столбца в Backend List

Чтоб 2 раза не вставать

Введение

Accessor (свойство) — способ доступа к внутреннему состоянию объекта, имитирующему переменную. Обращение к свойству объекта выглядит так же, как и обращение к обычному полю, но, в действительности, реализовано через вызов функции.

Создание accessor'а

Cоздается метод класса модели. Он должен быть с префиксом get и постфиксом Attribute. Через модель к такому методу обращаются как атрибуту в snake-case нотации (без префикса и постфикса).

SomeModel.php

public function getBestIndexationAttribute()
{
    if ($this->is_wos) {
        if (!$this->quartile) return 'Web of Science';
        switch ($this->quartile) {
            case 'Q1':
                return 'Web of Science Q1';
                break;
            case 'Q2':
                return 'Web of Science Q2';
                break;
            case 'Q3':
                return 'Web of Science Q3';
                break;
            case 'Q4':
                return 'Web of Science Q4';
                break;                
            case 'Q5':
                return 'Web of Science Emerging Sources Citation Index';
                break;                
        }
    }

    if ($this->is_scopus) return 'Scopus';
    if ($this->is_risc && $this->is_vak) return 'ВАК + РИНЦ';
    if ($this->is_risc) return 'РИНЦ';
    if ($this->is_vak) return 'ВАК';
}

Соответственно, чтобы получиться значение следует отбросить get и Attribute, привести имя к нижнему регистру и вставить символы подчёркивания. Получится SomeModel->best_indexation.

Добавление accessor'а в Backend List

Предельно просто. Созданный accessor добавляется в yaml файл как обычный столбец.

columns.yaml

# ===================================
#  List Column Definitions
# ===================================

columns:
    ...
    best_indexation: # snake_case
        label: Индекс
        type: text
        sortable: false
        searchable: false
    ...

После этого в Backend List появляется новый столбец.

Другие записи из подборки «OctoberCMS. Backend.»

Похожие записи