OctoberCMS Backend. Показывать ошибки валидации рядом с полями ввода.

Это вольный перевод статьи Backend - Display error messages before model fields от Christophe Vuagniaux.

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

Демонстрация результата

backend-form-validation.gif

Установка

Для получения подобного результата добавьте файл plugins/AUTHOR_CODE/PLUGIN_NAME/assets/js/display-fields-errors.js со следующим содержимым свой плагин:

/**
 * Listen error field message and display error message
 */
$(window).on('ajaxInvalidField', function (event, field, fieldName, fieldMessages, isFirst) {

    if (isFirst) {
        $('.field-has-error').remove();
    }

    $('<div class="field-has-error text-danger">' + fieldMessages[0] + '</div>').insertBefore($(field))
});

/**
 * Remove error messages on Success
 */
$(window).on('ajaxBeforeUpdate', function (event, context, data, textStatus, jqXHR) {

    // Check handler to avoid to clear message when other Ajax request occur (e.g.: recordFinder)
    if (typeof context.handler !== 'undefined' && context.handler === 'onSave') {
        $('.field-has-error').remove();
    }
});

И подключите этот файл в конструкторе контроллера для которого нужна такая функциональность.

<?php namespace Author\Plugin\Controllers;

class Items extends Controller
{
    ...

    public function __construct()
    {
        ...

        $this->addJs(url('plugins/AUTHOR_CODE/PLUGIN_NAME/assets/js/display-fields-errors.js'));
    }

}

Не забудьте заменить AUTHOR_CODE на свой код разработчика и PLUGIN_NAME - на имя разрабатываемого плагина.

https://octobercms.inetis.ch/backend-display-error-messages-before-model-fields

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

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

Как в OctoberCMS сделать простейшую переадресацию с одной страницы на другую?

Создаём страницу (Page), задаем URL и в секции код добавляем обработчик на хук жизненного цикла страницы. В данном случае это onStart, которая выполняется перед началом загрузки страницы.

function onStart()
{
    return Redirect::to('http://tyapk.ru');
}

FrontEnd контроллеры в OctoberCMS

В OctoberCMS нет концепции frontEnd контроллеров. Иными словами, идеология этой CMS не подразумевает возможность просто создать некий ProductController с несколькими action для обслуживания маршрутов Route::method('product/{id}', 'ProductController@show'). Вместо этого предлагается использовать компоненты плагинов. Именно компоненты являются формой frontEnd контроллеров.