后端排序和重新排序
Introduction
这重新排序行为 是控制器behavior 它提供了对数据库记录进行排序和重新排序的功能。该行为使用控制器操作提供一个名为 Reorder 的页面reorder
.此页面显示带有拖动手柄的记录列表,允许对它们进行排序并在某些情况下进行重组。
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() ?>
覆盖可排序的部分
如果您需要覆盖重新订购页面的默认视图,则必须复制
-
modules/backend/behaviors/reordercontroller/partials/_container.htm
-
modules/backend/behaviors/reordercontroller/partials/_records.htm
in
-
plugins/yournamespace/yourplugin/yoursortablecontroller/_reorder_container.htm
-
plugins/yournamespace/yourplugin/yoursortablecontroller/_reorder_records.htm
扩展模型查询
列表的查找查询数据库模型 可以通过重写来扩展reorderExtendQuery
控制器类中的方法。此示例将确保软删除记录包含在列表数据中,方法是应用withTrashed 查询范围:
public function reorderExtendQuery($query)
{
$query->withTrashed();
}