Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Override CRUD views

I would like to override the CRUD views of the Laravel Backpack CRUD package, because I want to make small changes to the layout. But obviously I don't want to change the CRUD package itself. Is there an elegant to do this?

like image 735
Sybrand Hoeksma Avatar asked Sep 02 '16 10:09

Sybrand Hoeksma


3 Answers

In your controller which is extending Backpack\CRUD\app\Http\Controllers\CrudController you need to override the method like index,create,edit which you want to change. All method are in-

Backpack\CRUD\app\Http\Controllers\CrudController

All the methods are here. You need to change here

 public function index()
{
    $this->crud->hasAccessOrFail('list');

    $this->data['crud'] = $this->crud;
    $this->data['title'] = ucfirst($this->crud->entity_name_plural);

    // get all entries if AJAX is not enabled
    if (! $this->data['crud']->ajaxTable()) {
        $this->data['entries'] = $this->data['crud']->getEntries();
    }

    // load the view from /resources/views/vendor/backpack/crud/ if it exists, otherwise load the one in the package
    // $this->crud->getListView() returns 'list' by default, or 'list_ajax' if ajax was enabled
    return view('your_view_name', $this->data);
}
like image 100
Sachin Avatar answered Nov 18 '22 10:11

Sachin


Found a way not even having to override the index() method, just use $this->crud->setListView() in your setup method of your CrudController, ex:

$this->crud->setListView('backpack::crud.different_list', $this->data);

thus, it will get the view under '/resources/views/vendor/backpack/crud/different_list.blade.php' instead of the default one in the package.

Besides setListView(), setEditView(), setCreateView(), setUpdateView()....are also available. hope it helps.

you can refer to https://laravel-backpack.readme.io/docs/crud-full-api for more detail.

// use a custom view for a CRUD operation
$this->crud->setShowView('your-view');
$this->crud->setEditView('your-view');
$this->crud->setCreateView('your-view');
$this->crud->setListView('your-view');
$this->crud->setReorderView('your-view');
$this->crud->setRevisionsView('your-view');
$this->crud->setRevisionsTimelineView('your-view');
$this->crud->setDetailsRowView('your-view');
like image 8
Ryan Ye Avatar answered Nov 18 '22 09:11

Ryan Ye


Before loading any views, Backpack for Laravel checks your resources/views/vendor/backpack/crud folder to see if you have any custom views. If you don't, it will just load the views in the package.

If you want to overwrite a blade file for all CRUDS, you can just place a file with the right name in the right folder. Take a look at how the files are organized in the package.

If you want to overwrite a blade file for just one CRUD, use Sachin's solution.

like image 5
tabacitu Avatar answered Nov 18 '22 11:11

tabacitu