Laravel-datatables: I use all in one installer package yajra/laravel-datatables:^1.0 but buttons are not created

Created on 11 May 2018  路  5Comments  路  Source: yajra/laravel-datatables

I use all in one installer package yajra/laravel-datatables:^1.0 datatable works fine but buttons are not created.

Resulting Javascript also seems fine.

(function(window,$){window.LaravelDataTables=window.LaravelDataTables||{};window.LaravelDataTables["dataTableBuilder"]=$("#dataTableBuilder").DataTable({"serverSide":true,"processing":true,"ajax":{"url":"","type":"GET","data":function(data) {
            for (var i = 0, len = data.columns.length; i < len; i++) {
                if (!data.columns[i].search.value) delete data.columns[i].search;
                if (data.columns[i].searchable === true) delete data.columns[i].searchable;
                if (data.columns[i].orderable === true) delete data.columns[i].orderable;
                if (data.columns[i].data === data.columns[i].name) delete data.columns[i].name;
            }
            delete data.search.regex;}},"columns":[{"name":"id","data":"id","title":"Id","orderable":true,"searchable":true},{"name":"name","data":"name","title":"Name","orderable":true,"searchable":true},{"name":"email","data":"email","title":"Email","orderable":true,"searchable":true},{"name":"created_at","data":"created_at","title":"Created At","orderable":true,"searchable":true},{"name":"updated_at","data":"updated_at","title":"Updated At","orderable":true,"searchable":true},{"defaultContent":"","data":"action","name":"action","title":"Action","render":null,"orderable":false,"searchable":false,"width":"150px"}],"dom":"Bfrtip","order":[[0,"desc"]],"buttons":["create","export","print","reset","reload"]});})(window,jQuery);
question

Most helpful comment

Thanks, works perfectly after publishing.

All 5 comments

Better inspect your console for any error logs that can give us a hint on what's causing the issue. My guess is there are some missing scripts that you may have forgot to include?

No Console errors

Files in use

UsersDataTable.php
DatatablesController.php
master.blade.php
welcome.blade.php

UsersDataTable.php

namespace App\DataTables;

use App\User;
use Yajra\DataTables\Services\DataTable;

class UsersDataTable extends DataTable
{
    /**
     * Build DataTable class.
     *
     * @param mixed $query Results from query() method.
     * @return \Yajra\DataTables\DataTableAbstract
     */
    public function dataTable($query)
    {
        return datatables($query)
            ->addColumn('action', 'useraction');
    }

    /**
     * Get query source of dataTable.
     *
     * @param \App\User $model
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function query(User $model)
    {
        return $model->newQuery()->select('id', 'name', 'email','created_at', 'updated_at');

    }

    /**
     * Optional method if you want to use html builder.
     *
     * @return \Yajra\DataTables\Html\Builder
     */
    public function html()
    {
        return $this->builder()
                    ->columns($this->getColumns())
                    ->minifiedAjax()
                    ->addAction(['width' => '150px'])
                    ->parameters($this->getBuilderParameters());
    }

    /**
     * Get columns.
     *
     * @return array
     */
    protected function getColumns()
    {
        return [
            'id',
            'name',
            'email',
            'created_at',
            'updated_at'
        ];
    }

    /**
     * Get filename for export.
     *
     * @return string
     */
    protected function filename()
    {
        return 'Users_' . date('YmdHis');
    }
}

DatatablesController.php

namespace App\Http\Controllers;

use App\DataTables\UsersDataTable;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class DatatablesController extends Controller
{
    /**
     * Display index page and process dataTable ajax request.
     *
     * @param \App\DataTables\UsersDataTable $dataTable
     * @return \Illuminate\Http\JsonResponse|\Illuminate\View\View
     */
    public function index(UsersDataTable $dataTable)
    {
        return $dataTable->render('welcome');
    }

    /**
     * Show create user page.
     *
     * @return \BladeView|bool|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function create()
    {
        return view('create');
    }
}

master.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    @section('title')
    <title>Hello World</title>
    @show

    <!-- Styles -->
    <!-- Bootstrap CSS -->

      <link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css"/>
        <link rel="stylesheet" type="text/css" href="////cdn.datatables.net/buttons/1.5.1/css/buttons.dataTables.min.css"/>

    <!-- Scripts -->


    <script>
        window.Laravel = {!! json_encode([
            'csrfToken' => csrf_token(),
        ]) !!};
    </script>
</head>
<body>
    <div id="app">
        <div class="container">
            <div class="row">
                <div class="col-sm-12">
                    @yield('content')
                </div>
            </div>
        </div>
    </div>

    <!-- Scripts -->
    <!-- jQuery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
         <!-- DataTables -->
<script type="text/javascript" src="//cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>


    @stack('scripts')

</body>

welcome.blade.php

@extends('master')


@section('content')

    <div class="tab-content">
        <div >
            <h2>Laravel Datatable </h2>
            <div class="panel panel-default">
                <div class="panel-body">
                     {!!  $dataTable->table()  !!}
                </div>
            </div>
        </div>

    </div>
@endsection

@push('scripts')
{!! $dataTable->scripts() !!}
@endpush

You need to include the buttons scripts. See https://yajrabox.com/docs/laravel-datatables/master/buttons-starter for ref.

<script src="https://cdn.datatables.net/buttons/1.0.3/js/dataTables.buttons.min.js"></script>
<script src="/vendor/datatables/buttons.server-side.js"></script>

BTW, don't forget to publish the buttons assets.

php artisan vendor:publish --tag=datatables-buttons

Thanks, works perfectly after publishing.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

jgatringer picture jgatringer  路  3Comments

ahmadbadpey picture ahmadbadpey  路  3Comments

SGarridoDev picture SGarridoDev  路  3Comments

FilipeBorges1993 picture FilipeBorges1993  路  3Comments

macnux picture macnux  路  3Comments