后端排序和重新排序

Introduction

重新排序行为 是控制器behavior 它提供了对数据库记录进行排序和重新排序的功能。该行为使用控制器操作提供一个名为 Reorder 的页面reorder.此页面显示带有拖动手柄的记录列表,允许对它们进行排序并在某些情况下进行重组。

该行为取决于模型类 必须实现以下之一模型特征:

  1. Winter\Storm\Database\Traits\Sortable
  2. Winter\Storm\Database\Traits\NestedTree

NOTE:如果需要在第三方控制下对以前未排序的模型添加排序,您可以使用Winter\Storm\Database\Behaviors\Sortable 行为,可以动态实现。但是,您需要确保模型表具有sort_order 列存在于其上。

为了使用重新排序行为,您应该添加\Backend\Behaviors\ReorderController::class 的定义$implement 控制器类的属性。

namespace Acme\Shop\Controllers;

class Categories extends Controller
{
    /**
     * @var array List of behaviors implemented by this controller
     */
    public $implement = [
        \Backend\Behaviors\ReorderController::class,
    ];
}

配置行为

Reorder 行为将从一个 YAML 格式加载其配置config_reorder.yaml 文件位于控制器的查看目录 (plugins/myauthor/myplugin/controllers/mycontroller/config_reorder.yaml) 默认情况下。

这可以通过覆盖$reorderConfig 控制器上的属性以引用不同的文件名或完整的配置数组:

public $reorderConfig = 'my_custom_reorder_config.yaml';

下面是典型的重新排序行为配置文件的示例:

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

# Reorder Title
title: Reorder Categories

# Attribute name
nameFrom: title

# Model Class name
modelClass: Acme\Shop\Models\Category

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

可以使用下面列出的配置选项。

Option Description
title 用于页面标题。
nameFrom 指定应将哪个属性用作每个记录的标签。
modelClass 一个模型类名,记录数据从这个模型中加载。
toolbar 对工具栏小部件配置文件或具有配置的数组的引用。

显示重新订购页面

你应该提供一个查看文件 用名字reorder.htm.此视图表示允许用户重新排序记录的重新排序页面。由于重新排序包括工具栏,因此视图文件将仅包含单个reorderRender 方法调用。

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

覆盖可排序的部分

如果您需要覆盖重新订购页面的默认视图,则必须复制

  1. modules/backend/behaviors/reordercontroller/partials/_container.htm
  2. modules/backend/behaviors/reordercontroller/partials/_records.htm

in

  1. plugins/yournamespace/yourplugin/yoursortablecontroller/_reorder_container.htm
  2. plugins/yournamespace/yourplugin/yoursortablecontroller/_reorder_records.htm

扩展模型查询

列表的查找查询数据库模型 可以通过重写来扩展reorderExtendQuery 控制器类中的方法。此示例将确保软删除记录包含在列表数据中,方法是应用withTrashed 查询范围:

public function reorderExtendQuery($query)
{
    $query->withTrashed();
}
豫ICP备18041297号-2