Sorting Records
Learn how to sort and structure records in a list.
October CMS provides features for sorting and reordering database records. For behaviors that support structured lists, you can define a structure property to enable the feature. Various model traits are used to support reordering including nested sets, simple trees and sortable models.
# Configuring a Behavior
The List Controller and Relation Controller backend behaviors currently support the option to reorder records using the structure property in the relevant definition. When defined, the page displays a list of records with a drag handle allowing them to be sorted and restructured.
# config_list.yaml
# ...
structure:
showTree: true
showReorder: true
showSorting: false
maxDepth: 2
The configuration properties listed below can be used.
Property | Description |
---|---|
showTree | displays a tree hierarchy for parent/child records. Default: true |
treeExpanded | if tree nodes should be expanded by default. Default: true |
showReorder | displays an interface for reordering records. Default: true |
showSorting | allows sorting records, disables the structure when sorted. Default: true |
maxDepth | defines the maximum levels allowed for reordering. Default: null |
dragRow | allow dragging the entire row in addition to the reorder handle. Default: true |
permissions | the permissions that the current backend user must have to modify the structure. Supports either a string for a single permission or an array of permissions of which only one is needed to grant access. |
# Supported Model Types
Depending on the requirements, a different model interface can be used for managing nested and sorted records. The behavior will adapt depending on which trait is implemented.
# Nested Set
Use the NestedTree
trait when a fixed structure is needed. This includes parent-child relationships and when records need to be displayed in a specific order.
class Category extends Model
{
use \October\Rain\Database\Traits\NestedTree;
}
Read more about the NestedTree
trait in the database documentation.
# Simple Tree
Use the SimpleTree
trait when a basic parent-child relationship is needed.
class Category extends Model
{
use \October\Rain\Database\Traits\SimpleTree;
}
Read more about the SimpleTree
trait in the database documentation.
# Sortable Model
Use the Sortable
trait when records need to be displayed in a specific order.
class User extends Model
{
use \October\Rain\Database\Traits\Sortable;
}
Read more about the Sortable
trait in the database documentation.
# Sorting Related Records
Sorting related records is possible using the Relation Controller using the structure property. The supported relation types are listed below.
- Has Many uses the
Sortable
trait on the related model. - Belongs To Many uses the
SortableRelation
trait on the parent model (see below).
# Sortable Relation Model Trait
Use the SortableRelation
model trait when records need to be sorted inside a pivot table, such as a Belongs To Many relation type. This trait requires the pivotSortable
property to be defined in the relationship where the value is the sortable column name found in the pivot table.
class User extends Model
{
use \October\Rain\Database\Traits\SortableRelation;
/**
* @var array belongsToMany
*/
public $belongsToMany = [
'roles' => [
Role::class,
'table' => 'users_roles',
'pivotSortable' => 'sort_order',
]
];
}
Then inside your relation configuration, you should enable the showReorder
property and disable the showTree
property.
roles:
#...
structure:
showReorder: true
showTree: false