后端排序和重新排序

介绍

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

行为取决于model class ,它必须实现以下model traits之一:

  1. October\Rain\Database\Traits\Sortable
  2. October\Rain\Database\Traits\NestedTree

为了使用重新排序行为,您应该将它添加到控制器类的$implement属性中。 此外,应定义$reorderConfig类属性,其值应引用用于配置行为选项的YAML文件。

  1. namespace Acme\Shop\Controllers;
  2. class Categories extends Controller
  3. {
  4. public $implement = [
  5. 'Backend.Behaviors.ReorderController',
  6. ];
  7. public $reorderConfig = 'config_reorder.yaml';
  8. // [...]
  9. }

配置重新排序行为

$reorderConfig属性中引用的配置文件以YAML格式定义。 该文件应放入控制器的views目录。 以下是配置文件的示例:

  1. # ===================================
  2. # Reorder Behavior Config
  3. # ===================================
  4. # Reorder Title
  5. title: Reorder Categories
  6. # Attribute name
  7. nameFrom: title
  8. # Model Class name
  9. modelClass: Acme\Shop\Models\Category
  10. # Toolbar widget configuration
  11. toolbar:
  12. # Partial for toolbar buttons
  13. buttons: reorder_toolbar

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

选项 描述
title 用于页面标题。
nameFrom 指定应将哪个属性用作每个记录的标签。
modelClass 模型类名称,记录数据从此模型加载。
toolbar 引用Toolbar Widget配置文件或带配置的数组。

显示重新排序页面

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

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

扩展模型查询

可以通过覆盖控制器类中的reorderExtendQuery方法来扩展列表数据库模型 的查询查询。 此示例将通过将withTrashed作用域应用于查询来确保列表数据中包含软删除的记录:

  1. public function reorderExtendQuery($query)
  2. {
  3. $query->withTrashed();
  4. }