Октябрь CMS - сортировка записей - пример частичного для значков панели инструментов?

Я взволнован тем, что в октябрьской CMS недавно добавлена внутренняя функциональность для сортировки записей в представлении списка. Но у меня возникли проблемы с тем, чтобы заставить его работать. Документация здесь. Я следовал указаниям так:

В моем контроллере я реализовал ReorderController:

<?PHP namespace BTruchan\Team\Controllers;

use Backend;
use BackendMenu;
use BackendAuth;
use Backend\Classes\Controller;
use System\Classes\SettingsManager;

class Members extends \Backend\Classes\Controller 
{
    public $implement = [
        'Backend.Behaviors.FormController',
        'Backend.Behaviors.ListController',
        'Backend.Behaviors.ReorderController'
    ];

    public $formConfig = 'config_form.yaml';
    public $listConfig = 'config_list.yaml';
    public $reorderConfig = 'config_reorder.yaml';

    public $requiredPermissions = ['btruchan.team.manage'];

    public function __construct()
    {
        parent::__construct();
        BackendMenu::setContext('BTruchan.Team', 'team');
    }

    public function index()
    {
        $this->makeLists();
        $this->makeView('reorder');
    }
}

?>

Я создал файл представления reorder.htm (reorder.htm), который содержит:

<?= $this->reorderRender() ?>

Мой файл config_reorder.yaml содержит:

# ===================================
#  Reorder Behavior Config
# ===================================

# Reorder Title
title: Reorder Members

# Attribute name
nameFrom: name

# Model Class name
modelClass: BTruchan\Team\Models\Members


# Toolbar widget configuration
#toolbar:
# Partial for toolbar buttons
#    buttons: reorder_toolbar

Вы заметите, что часть reorder_toolbar закомментирована. Это потому, что я действительно не знаю, что должно идти на этой панели инструментов. Я не смог найти никакой документации, которая показывает содержимое файла _reorder_toolbar.htm.

Неудивительно, что с закомментированным кодом выдается ошибка:

Неопределенная переменная: reorderToolbarWidget

Некоторая дополнительная информация:

Было предложено, чтобы я прочитал на панели инструментов списка здесь.

Поэтому я добавил следующую часть панели инструментов (названную _reorder_toolbar.htm):

<div data-control="toolbar">
    <a
        href="<?= Backend::url('btruchan/team/members/create') ?>"
        class="btn btn-primary oc-icon-plus">
        New Team Member
    </a>
    <button
        class="btn btn-default oc-icon-trash-o"
        disabled="disabled"
        onclick="$(this).data('request-data', {
            checked: $('.control-list').listWidget('getChecked')
        })"
        data-request="onDelete"
        data-request-confirm="Delete Team Member: Are you sure?"
        data-trigger-action="enable"
        data-trigger=".control-list input[type=checkbox]"
        data-trigger-condition="checked"
        data-request-success="$(this).prop('disabled', false)"
        data-stripe-load-indicator>
        Delete
    </button>
</div>

Но я все еще получаю ошибку:

Неопределенная переменная: reorderToolbarWidget/var/www/terrasearch/public/modules/backend/Behaviors/reordercontroller/partials/_container.htm строка 1

Код в CMS за октябрь, на который ссылается это сообщение об ошибке:

<?php if ($reorderToolbarWidget): ?>
    <!-- Reorder Toolbar -->
    <div id="<?= $this->getId('reorderToolbar') ?>" class="reorder-toolbar">
        <?= $reorderToolbarWidget->render() ?>
    </div>
<?php endif ?>

<!-- Reorder List -->
<?= Form::open() ?>
    <div
        id="reorderTreeList"
        class="control-treelist"
        data-control="treelist"

Я пытался отследить эту ошибку. Похоже, что в \public\modules\backend\behaviors\ReorderController.php reorder() не вызывается, что означает, что prepareVars() также не вызывается. Это предотвращает выполнение следующего кода:

$this->vars['reorderToolbarWidget'] = $this->toolbarWidget;

ReorderController.php :: makeToolbarWidget() вызывается и кажется, что все в порядке. Я проверил $this-> toolbarWidget, и он, кажется, содержит совершенно хорошие данные. (Это не NULL).

Ответ 1

ReorderController - это поведение, поэтому оно должно быть вызвано как назначение контроллера (например, example.com/backend/btruchan/team/members/reorder). Он не закодирован, чтобы быть вызванным как представление так, как вы его используете в своей функции index.

В источнике ReorderController функция reorder является единственным методом, который вызывает защищенную функцию prepareVars, которая является единственным местом, где reorderToolbarWidget определен для страницы. Эта функция prepareVars недоступна для хост-контроллера.

Итак, вместо того, чтобы пытаться создать представление с помощью $this->makeView('reorder');, создайте кнопку панели инструментов в части _list_toolbar.htm, которая указывает на URL-адрес назначения reorder. Например:

<div data-control="toolbar">
    <a href="<?= Backend::url('btruchan/team/members/create') ?>" class="btn btn-primary oc-icon-plus">New Member</a>
    <a href="<?= Backend::url('btruchan/team/members/reorder') ?>" class="btn btn-primary oc-icon-sort">Reorder Members</a>
</div>

Когда вы нажимаете кнопку "Изменить членов-членов", вы будете перенаправлены на новую страницу с записями, которые можно переупорядочить.

Вы можете использовать фрагмент _reorder_toolbar.htm, чтобы добавить все, что угодно, в верхней части страницы переупорядочения. Или не использовать его вообще.