Edit

Reorder Operation


About

This operation allows your admins to reorder & nest entries.

CRUD Reorder Operation

Requirements

Your model should have the following integer fields, with a default value of 0: parent_id, lft, rgt, depth.

Additionally, the parent_id field has to be nullable.

How to Use

In order to enable this operation in your CrudController, you need to use the ReorderOperation trait, and have a setupReorderOperation() method that defines the label and max_level of allowed depth.

<?php

namespace App\Http\Controllers\Admin;

use Backpack\CRUD\app\Http\Controllers\CrudController;

class ProductCrudController extends CrudController
{
    use \Backpack\CRUD\app\Http\Controllers\Operations\ReorderOperation;

    protected function setupReorderOperation()
    {
        // define which model attribute will be shown on draggable elements 
        $this->crud->set('reorder.label', 'name');
        // define how deep the admin is allowed to nest the items
        // for infinite levels, set it to 0
        $this->crud->set('reorder.max_level', 2);
    }
}

This will:

  • allow access to the Reorder operation;
  • make a "Reorder" button appear next to "Add entry" in the List view, if the List operation is enabled;
  • enable the routes needed by the Reorder operation;

Where:

  • attribute_name should be the attribute you want shown on the draggable elements (ex: name);
  • ALLOWED_DEPTH should be an integer, how many levels deep would you allow your admin to go when nesting; for infinite levels, you should set it to 0;

How It Works

The /reorder route points to a reorder() method in your EntityCrudController.

How to Overwrite

In case you need to change how this operation works, take a look at the ReorderOperation.php trait to understand how it works. You can easily overwrite the reorder() or the saveReorder() methods:

use \Backpack\CRUD\app\Http\Controllers\Operations\ReorderOperation { reorder as traitReorder; }

public function reorder()
{
    // your custom code here

    // call the method in the trait
    return $this->traitReorder();
}

You can also overwrite the reorder button by creating a file with the same name inside your resources/views/vendor/backpack/crud/buttons/. You can easily publish the reorder button there to make changes using:

php artisan backpack:publish crud/buttons/reorder

Like our open-core?

Then you'll love our premium add-ons - productivity tools and tons of new features.