十月 CMS - 排序记录 - 工具栏图标的部分示例?

Posted

技术标签:

【中文标题】十月 CMS - 排序记录 - 工具栏图标的部分示例?【英文标题】:October CMS - sorting records - example of the partial for the toolbar icons? 【发布时间】:2015-11-27 06:44:35 【问题描述】:

我很高兴 10 月 CMS 最近添加了用于在列表视图中对记录进行排序的后端功能。但我在让它工作时遇到了一些麻烦。文档是here。我遵循了这样的方向:

在我的控制器中,我实现了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

一些附加信息:

有人建议我阅读列表工具栏here。

所以我添加了以下工具栏部分(命名为_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 行

该错误消息所指的 10 月 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)。

【问题讨论】:

我不确定你想做什么。 toolbarWidget 是做什么用的?在文档中,据说重新排序的文件必须称为reorder.htm。 here 【参考方案1】:

ReorderController 是一种行为,因此它应该被称为控制器目标(例如example.com/backend/btruchan/team/members/reorder)。它没有被编码为在 index 函数中以视图的方式调用。

在 ReorderController 源代码中,reorder 函数是调用 prepareVars 受保护函数的唯一方法,这是为页面定义 reorderToolbarWidget 的唯一位置。主机控制器不提供 prepareVars 功能。

因此,与其尝试使用$this-&gt;makeView('reorder'); 创建视图,不如在指向reorder 目标URL 的_list_toolbar.htm 部分中创建一个工具栏按钮。例如:

<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 部分在重新排序页面的顶部添加您想要的任何内容。或者,根本不使用它。

【讨论】:

Builder 插件正确生成了所有必要的文件,但没有在菜单中添加重新排序按钮。这对我有帮助,谢谢。

以上是关于十月 CMS - 排序记录 - 工具栏图标的部分示例?的主要内容,如果未能解决你的问题,请参考以下文章

十月 CMS- 语言选择器组件 Twig

十月 CMS 组件加载布局

如何仅在组件类或插件上创建十月 CMS 上的中间件?

十月 CMS - 如何正确路由

十月cms上传文件

十月CMS发布表格