Konfigurasi Datatables

Sebelum kita melanjutkan latihan praktik membuat datatable dengan use case spesifik. Kita akan memepelajari terlebih dahulu konfigurasi yang tersedia untuk package yajra/laravel-datatables

Konfigurasi tersebut terdapat pada config/datatables.php.

Pencarian / Search

Konfigurasi search mengatur tentang perilaku pencarian pada datatable yang kita pakai.

smart

Konfigurasi pertama pada kelompok konfigurasi pencarian adalah smart, konfigurasi ini mengatur apakah keyword yang dimasukkan pada input pencarian di datatable akan dikelilingi dengan % seperti ini LIKE "%keyword%".

Tentu kamu paham kan, perbedaan jika menggunakan % dan tidak. Sebagai pengingat, pada SQL, pencarian dengan perintah LIKE keyword akan mencari row yang memiliki cell bernilai seperti keyword, mirip seperti = meskipun berbeda, tapi secara garis besar keduanya mirip.

Sementara jika keyword dikelilingi % % seperti ini LIKE "%keyword%"" maka pencarian akan dilakukan terhadap row dengan cell yang mengandung keyword tidak peduli di depan, di tengah atau di belakang posisi keyword tersebut.

Untuk mengaktifkan smart kamu cukup biarkan saja konfigurasi seperti bawaan yaitu bernilai true, jika ingin menonaktifkan mode smart maka kamu ubah nilai konfigurasinya menjadi false.

multi_term

Konfigurasi berikutnya adalah multi term, apabila bernilai true maka kata kunci pencarian akan dipecah dan digunakan sebagai keyword tersendiri bukan satu kesatuan.

Misalnya jika kita mencari nama Muhammad Azamuddin, maka datatable akan memecah menjadi dua kata kunci yaitu Muhammad dan Azamuddin, sehingga setiap User di database dengan kata yang mengandung Muhammad atau Azamuddin akan masuk ke hasil pencarian.

Sementara jika kita ubah nilai konfigurasi multi term ini menjadi false maka kata kunci Muhammad Azamuddin akan diperlaukan sebagai satu kata kunci dan tentu hasilnya adalah users yang memiliki nama mengandung Muhammad Azamuddin, sedangkan Muhammad Ilzam atau Azamuddin Kahfi tidak masuk hasil pencarian.

case_insensitive

Konfigurasi ini sangat jelas ya, jika bernilai true maka kata kunci pencarian pada DataTable akan diperlakukan secara case insenstive alias tidak peduli kapitalisasi hurufnya, yakni kata kunci Muhammad Azamuddin dianggap sama saja dengan muhammad azamuddin.

Sementara jika kita ubah menjadi false, maka kedua kata kunci tadi dianggap kata kunci yang berbeda.

use_wildcards

Secara bawaan nilai dari konfigurasi ini adalah false, jika dijadikan true maka kata kunci akan disisipkan karakter wildcard (%) pada setiap karakter kata kunci misalnya Muhammad Azamuddin akan menjadi %M%u%h%a%m%m%a%d% %A%z%a%m%u%d%d%i%n% pada SQL pencariannya.

starts_with

Konfigurasi terakhir pada kelompok konfigurasi pencarian adalah starts_with, nilai bawaan dari konfigurasi ini adalah false. Jika kita ubah menjadi true, maka datatable akan melakukan pencarian keyword pada bagian awal setiap cell yang dicari. Alias menggunakan SQL semacam ini keyword%

nulls_last_sql

Merupakan konfigurasi untuk mengatur perintah SQL yang digunakan untuk mensortir pada kolom agar nilai NULL ditampilkan paling akhir. Kenapa diperlukan konfigurasi ini? Karena perintah yang digunakan tergantung database engine yang kita gunakan.

Nilai bawaan dari konfigurasi ini adalah untuk database Postgres atau Oracle yaitu:

:column :direction NULLS LAST

Jika kamu menggunakan MySQL silahkan ubah nilainya menjadi seperti ini:

CASE WHEN :column IS NULL THEN 1 ELSE 0 END, :column :direction

error

Konfigurasi ini kita gunakan untuk menentukan pesan error yang akan diberikan yang terkait dengan package yajra/laravel-datatables. Ada 3 nilai yang bisa kita berikan yaitu:

  • null
  • 'throw'
  • pesan custom

Secara bawaan nilai dari konfigurasi ini adalah null.

Untuk mengubah nilai konfigurasi ini, kamu bisa mengubah langsung pada file config/datatables.php atau dengan mengubah pada file .env dengan key DATATABLES_ERROR, hal ini karena secara bawaan konfigurasi ini membaca dari file .env terlihat dari kode env('DATATABLES_ERROR', null)

Berikut adalah penjelasan masing-masing nilai yang bisa kita pilih.

null

Jika kita menggunakan nilai null maka pesan asli terkait error akan ditampilkan misalnya seperti ini:

{
    "draw": 24,
    "recordsTotal": 200,
    "recordsFiltered": 0,
    "data": [],
    "error": "Exception Message:\n\nSQLSTATE[42S22]: Column not found: 1054 Unknown column 'xxx' in 'order clause' (SQL: select * from `users` where `users`.`deleted_at` is null order by `xxx` asc limit 10 offset 0)"
}

'throw'

Jika kita menggunakan nilai 'throw' maka package akan melemparkan Exception yaitu \Yajra\DataTables\Exception. Kemudian kita bisa menangani kesalahan Exception tersebut pada app/Exceptions/Handler.php seperti ini:

Pada method render di file app/Exceptions/Handler.php kita mengecek terlebih dahulu apakah $exception berasal dari \Yajra\DataTables\Exception, jika iya maka tangani dengan kode berikut:

return response([
    'draw'            => 0,
    'recordsTotal'    => 0,
    'recordsFiltered' => 0,
    'data'            => [],
    'error'           => 'Laravel Error Handler',
]);

Sehingga file tersebut menjadi seperti ini:

  /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Throwable  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Throwable $exception)
    {
        if ($exception instanceof \Yajra\DataTables\Exception) {
            return response([
                'draw'            => 0,
                'recordsTotal'    => 0,
                'recordsFiltered' => 0,
                'data'            => [],
                'error'           => 'Terjadi kesalahan terkait datatable',
            ]);
        }

        return parent::render($request, $exception);
    }

Pesan Custom

Untuk menggunakan pesan custom kita cukup gunakan String pesan yang kita inginkan misalnya "Terjadi kesalahan terkait datatables", kita juga bisa menggunakan key pada penerjemahan misalnya datatables.error (dengan asumsi kamu sudah memiliki key tersebut)

Contoh response dengan pesan custom

{
    "draw": 24,
    "recordsTotal": 200,
    "recordsFiltered": 0,
    "data": [],
    "error": "Terjadi kesalahan terkait datatables"
}

Columns / Kolom

Kelompok konfiguarsi kolom mengatur bagaimana perilaku kolom pada DataTable yang kita gunakan.

excess

Konfigurasi ini berbentuk Array yang memiliki nilai bawaan yaitu ['rn', 'row_num'].

Item yang berada pada Array di atas adalah nama dari kolom yang ingin disembunyikan dari DataTable. Jika ingin menambahkan kolom lain maka kita cukup tambahkan item pada Array tersebut misalnya menjadi ['rn', 'row_num', 'internal_id']

escape

Konfigurasi ini juga bertipe Array yang menentukan kolom mana saja yang akan dilakukan escape sehingga aman dari serangan XSS. Nilai bawaannya adalah * yang artinya semua kolom dilakukan escaping.

Jika ada kolom yang ingin kita non aktifkan escape ini maka kita ganti nilainya dari * menjadi misalnya ['free_column']

Untuk menonaktifkan pada semua kolom maka kita gunakan Array kosong seperti ini []

raw

Konfigurasi ini berisi kolom yang diizinkan untuk berisi HTML dan merender konten HTML tersebut. Secara bawaan bernilai ['action'] yang berarti kolom action diizinkan untuk memuat HTML dan merendernya.

Kita bisa menambahkan kolom lain jika diperlukan, tapi perlu diingat bahwa menambahkan kolom di sini itu berarti kita membuka diri terhadap serangan XSS untuk kolom tersebut.

blacklist

Konfigurasi ini digunakan untuk melarang kolom untuk dicari pada pencarian ataupun dilakukan sortir.

Secara bawaan nilainya adalah ['password', 'remember_token'] yang berarti kolom password dan remember_token tidak akan bisa dilakukan pencarian maupun sortir pada DataTable.

whitelist

Merupakan kebalikan dari blacklist, hanya kolom yang terdaftar di sini yang bisa dilakukan pencarian / sortir.

Nilai bawaan dari konfigurasi ini adalah * yang artinya semua kolom bisa dilakukan pencarian maupun sortir, kecuali yang didaftarkan pada konfigurasi blacklist

Konfigurasi Lainnya

Konfigurasi yang tidak dijelaskan di atas kami kelompokkan pada Konfigurasi Lainnya karena konfigurasi ini mungkin tidak akan teman-teman gunakan, namun untuk pengetahuan tetap kami sebutkan di sini.

json

Terdapat dua konfigurasi pada kelompok konfigurasi json yaitu header dan option, konfigurasi ini digunakan untuk melakukan setting terhadap response header dan options.

index_column

Untuk mengubah nama internal column index yang digunakan oleh DataTable, nilai bawaanya adalah DT_RowIndex.

engines

Berisi mapping builder yang tersedia pada DataTable, kita bisa menambahkan builder custom jika mau. Nilai bawaanya adalah seperti berikut:

'engines'        => [
  'eloquent'   => Yajra\DataTables\EloquentDataTable::class,
  'query'      => Yajra\DataTables\QueryDataTable::class,
  'collection' => Yajra\DataTables\CollectionDataTable::class,
  'resource'   => Yajra\DataTables\ApiResourceDataTable::class,
],

builders

Berisi builder yang diterima oleh DataTable dan diteruskan melalui mapping pada konfigurasi engines.


Layanan

Hai, ada 2 cara untuk mendapatkan ilmu terkait Remote Work dari Saya, yaitu:

Privat

Konsultasi 1 on 1

  • Kira-kira 1 jam kamu boleh tanya seputar cara dapat kerja remote work.
  • Kamu boleh kulik apa yang saya praktikan selama ini sehingga bisa dapat klien di Singapura, Amerika, dan bisa masuk Toptal dengan gaji 3 digit.
  • Biaya: 400rb / jam
  • Mekanismenya adalah nanti saya ajukan dulu beberapa pertanyaan yang bisa kamu jawab secara tertulis (sebelum sesi dimulai).

    Dan juga kamu nulis daftar pertanyaan-pertanyaan yang ingin kamu ketahui. Tujuannya supaya lebih paham kondisimu saat ini dan bisa saya berikan saran yang lebih personalized.

    Baru setelah itu masuk sesi Gmeet call.
  • Kalau mau lanjut silahkan booking, kalau tidak lanjut pun gak masalah
Lanjut konsultasi? Silahkan...
atau
Online Course

Menjadi Pekerja Remote Internasional

  • Kumpulan hasil pemikiran saya terkait hal-hal utama sebagai perantara saya bisa menembus kerja remote, dalam bentuk tulisan (dan video)
  • Insight jitu meningkatkan chance job offer
  • Materi terkait apa yang saya praktikan selama ini sehingga bisa dapat klien di Singapura, Amerika, dan bisa masuk Toptal dengan gaji 3 digit.
  • Kumpulan insight dari sesi konsultasi yang saya lakukan selama ini.
  • Investasi: Hanya 447rb*
    *Harga promo
© 2023 Literasikode.
Supported by
Asset 1