October 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), который содержит:

<?= $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).


person clone45    schedule 01.09.2015    source источник
comment
Я не уверен, что ты хочешь делать. Для чего используется toolbarWidget? В документации сказано, что файл переупорядочения должен называться reorder.htm. здесь   -  person Félix Desjardins    schedule 10.09.2015


Ответы (1)


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

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

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

<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, чтобы добавить все, что хотите, вверху страницы изменения порядка. Или вообще не использовать.

person Patrick Ward    schedule 01.10.2015
comment
Плагин Builder правильно сгенерировал все необходимые файлы, но не добавил кнопку изменения порядка в меню. Это мне помогло, спасибо. - person swt83; 06.11.2016