|
1 |
| -on going |
2 |
| -on going |
| 1 | +## Pengantar |
| 2 | + |
| 3 | +Paginator Laravel terintegrasi dengan query builder dan Eloquent ORM dan menyediakan pagination record database yang nyaman dan mudah digunakan tanpa konfigurasi nol. |
| 4 | + |
| 5 | +Secara default, HTML yang dihasilkan oleh paginator kompatibel dengan framework Tailwind CSS ; namun, dukungan pagination Bootstrap juga tersedia. |
| 6 | +## Penggunaan Dasar |
| 7 | +### Membuat Paginasi Hasil Query Builder |
| 8 | +Ada beberapa cara untuk membuat halaman item. Yang paling sederhana adalah dengan menggunakan **paginate** metode pada query builder atau query Eloquent . **paginate** Metode otomatis menangani pengaturan queri "batas" dan "offset" berdasarkan pada halaman saat ini sedang dilihat oleh pengguna. Secara default, halaman saat ini dideteksi oleh nilai **page** argumen string queri pada permintaan HTTP. Nilai ini secara otomatis terdeteksi oleh Laravel, dan juga secara otomatis dimasukkan ke dalam tautan yang dihasilkan oleh paginator. |
| 9 | + |
| 10 | +Dalam contoh ini, satu-satunya argumen yang diteruskan ke **paginate** metode adalah jumlah item yang ingin Anda tampilkan "per halaman". Dalam hal ini, mari kita tentukan bahwa kita ingin menampilkan 15 item per halaman: |
| 11 | +```java |
| 12 | +<?php |
| 13 | + |
| 14 | +namespace App\Http\Controllers; |
| 15 | + |
| 16 | +use App\Http\Controllers\Controller; |
| 17 | +use Illuminate\Support\Facades\DB; |
| 18 | + |
| 19 | +class UserController extends Controller |
| 20 | +{ |
| 21 | + /** |
| 22 | + * Show all of the users for the application. |
| 23 | + * |
| 24 | + * @return \Illuminate\Http\Response |
| 25 | + */ |
| 26 | + public function index() |
| 27 | + { |
| 28 | + return view('user.index', [ |
| 29 | + 'users' => DB::table('users')->paginate(15) |
| 30 | + ]); |
| 31 | + } |
| 32 | +} |
| 33 | +``` |
| 34 | +### paginasi sederhana |
| 35 | +Metode **paginate** menghitung jumlah total catatan cocok dengan queri sebelum mengambil catatan dari database. Hal ini dilakukan agar paginator mengetahui jumlah halaman record yang ada secara total. Namun, jika Anda tidak berencana untuk menampilkan jumlah total halaman di UI aplikasi Anda, maka queri penghitungan catatan tidak diperlukan. |
| 36 | + |
| 37 | +Oleh karena itu, jika Anda hanya perlu menampilkan tautan "Berikutnya" dan "Sebelumnya" sederhana di UI aplikasi, Anda dapat menggunakan **simplePaginate** metode ini untuk melakukan kueri tunggal yang efisien: |
| 38 | +```java |
| 39 | +$users = DB::table('users')->simplePaginate(15); |
| 40 | +``` |
| 41 | +### Membuat Paginasi Hasil Fasih |
| 42 | +Dalam contoh ini, kami akan membuat halaman **App\Models\User** model dan menunjukkan bahwa kami berencana untuk menampilkan 15 catatan per halaman. Seperti yang Anda lihat, sintaksnya hampir identik dengan membuat halaman hasil query builder: |
| 43 | +```java |
| 44 | +use App\Models\User; |
| 45 | + |
| 46 | +$users = User::paginate(15); |
| 47 | +``` |
| 48 | +Tentu saja, Anda dapat memanggil **paginate** metode setelah menetapkan batasan lain pada kueri, seperti **where** klausa: |
| 49 | +```java |
| 50 | +$users = User::where('votes', '>', 100)->paginate(15); |
| 51 | +``` |
| 52 | +Anda juga dapat menggunakan **simplePaginate** metode ini saat membuat paginasi model Eloquent: |
| 53 | +```java |
| 54 | +$users = User::where('votes', '>', 100)->simplePaginate(15); |
| 55 | +``` |
| 56 | +Demikian pula, Anda dapat menggunakan **cursorPaginate** metode untuk membuat kursor paginasi model Eloquent: |
| 57 | +```java |
| 58 | +$users = User::where('votes', '>', 100)->cursorPaginate(15); |
| 59 | +``` |
| 60 | +### Paginasi Kursor |
| 61 | +Sementara **paginate** dan **simplePaginate** membuat kueri menggunakan klausa "offset" SQL, paginasi kursor bekerja dengan membuat klausa "di mana" yang membandingkan nilai kolom terurut yang terdapat dalam kueri, memberikan kinerja database paling efisien yang tersedia di antara semua metode paginasi Laravel. Metode pagination ini sangat cocok untuk kumpulan data besar dan antarmuka pengguna scrolling "tak terbatas". |
| 62 | + |
| 63 | +Tidak seperti pagination berbasis offset, yang menyertakan nomor halaman dalam string kueri URL yang dihasilkan oleh paginator, pagination berbasis kursor menempatkan string "kursor" dalam string kueri. Kursor adalah string yang disandikan yang berisi lokasi kueri paginasi berikutnya harus memulai penomoran halaman dan arah yang harus dipaginasi: |
| 64 | +```java |
| 65 | +http://localhost/users?cursor=eyJpZCI6MTUsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0 |
| 66 | +``` |
| 67 | +Anda dapat membuat instance paginator berbasis kursor melalui **cursorPaginate** metode yang ditawarkan oleh pembuat kueri. Metode ini mengembalikan sebuah instance dari **Illuminate\Pagination\CursorPaginator**: |
| 68 | +```java |
| 69 | +$users = DB::table('users')->orderBy('id')->cursorPaginate(15); |
| 70 | +``` |
| 71 | +Setelah Anda mengambil instance paginator kursor, Anda dapat menampilkan hasil pagination seperti biasanya saat menggunakan metode **paginate** and **simplePaginate**. Untuk informasi lebih lanjut tentang metode instans yang ditawarkan oleh kursor paginator, silakan lihat dokumentasi metode instans paginator kursor . |
| 72 | + |
| 73 | +### Membuat Paginator Secara Manual |
| 74 | +Terkadang Anda mungkin ingin membuat instance pagination secara manual, meneruskannya ke array item yang sudah Anda miliki di memori. Anda dapat melakukannya dengan membuat **Illuminate\Pagination\Paginator, Illuminate\Pagination\LengthAwarePaginator** atau **Illuminate\Pagination\CursorPaginatorinstance,** tergantung pada kebutuhan Anda. |
| 75 | + |
| 76 | +**Paginator** dan **CursorPaginator** kelas tidak perlu tahu jumlah item di set hasil; namun, karena ini, kelas-kelas ini tidak memiliki metode untuk mengambil indeks halaman terakhir. Di **LengthAwarePaginator** menerima hampir argumen yang sama seperti Paginator; namun, ini membutuhkan hitungan jumlah total item dalam kumpulan hasil. |
| 77 | + |
| 78 | +Dengan kata lain, **Paginator** sesuai dengan **simplePaginate** metode pada pembuat kueri, **CursorPaginator** sesuai dengan **cursorPaginate** metode, dan **LengthAwarePaginator** sesuai dengan **paginate** metode. |
| 79 | +### Menyesuaikan URL Pagination |
| 80 | +Secara default, tautan yang dihasilkan oleh paginator akan cocok dengan URI permintaan saat ini. Namun, metode paginator **withPath** memungkinkan Anda untuk menyesuaikan URI yang digunakan oleh paginator saat membuat tautan. Misalnya, jika Anda ingin paginator menghasilkan tautan seperti **http://example.com/admin/users?page=N,** Anda harus meneruskan **/admin/users** ke **withPath** metode: |
| 81 | +```java |
| 82 | +use App\Models\User; |
| 83 | + |
| 84 | +Route::get('/users', function () { |
| 85 | + $users = User::paginate(15); |
| 86 | + |
| 87 | + $users->withPath('/admin/users'); |
| 88 | + |
| 89 | + // |
| 90 | +}); |
| 91 | +``` |
| 92 | +### Menambahkan Nilai String Kueri |
| 93 | +Anda dapat menambahkan string queri tautan pagination menggunakan **appends** metode ini. Misalnya, untuk menambahkan **sort=votes** ke setiap tautan pagination, Anda harus membuat panggilan berikut ke **appends**: |
| 94 | +```java |
| 95 | +use App\Models\User; |
| 96 | + |
| 97 | +Route::get('/users', function () { |
| 98 | + $users = User::paginate(15); |
| 99 | + |
| 100 | + $users->appends(['sort' => 'votes']); |
| 101 | + |
| 102 | + // |
| 103 | +}); |
| 104 | +``` |
| 105 | +Anda dapat menggunakan **withQueryString** metode ini jika ingin menambahkan semua nilai string queri permintaan saat ini ke tautan pagination: |
| 106 | +```java |
| 107 | +$users = User::paginate(15)->withQueryString(); |
| 108 | +``` |
| 109 | +### Menambahkan Fragmen Hash |
| 110 | +Jika Anda perlu menambahkan "fragmen hash" ke URL yang dihasilkan oleh paginator, Anda dapat menggunakan **fragment** metode ini. Misalnya, untuk menambahkan **#users** ke akhir setiap tautan pagination, Anda harus memanggil **fragment** metode seperti ini: |
| 111 | +```java |
| 112 | +$users = User::paginate(15)->fragment('users'); |
| 113 | +``` |
| 114 | +### Menampilkan Hasil Pagination |
| 115 | +Saat memanggil **paginate** metode, Anda akan menerima turunan dari **Illuminate\Pagination\LengthAwarePaginator,** saat memanggil **simplePaginate** metode mengembalikan turunan dari **Illuminate\Pagination\Paginator.** Dan, akhirnya, memanggil **cursorPaginate** metode mengembalikan sebuah instance dari **Illuminate\Pagination\CursorPaginator**. |
| 116 | + |
| 117 | +Objek-objek ini menyediakan beberapa metode yang menjelaskan kumpulan hasil. Selain metode pembantu ini, instance paginator adalah iterator dan dapat diulang sebagai array. Jadi, setelah Anda mengambil hasilnya, Anda dapat menampilkan hasilnya dan merender tautan halaman menggunakan Blade : |
| 118 | +```java |
| 119 | +<div class="container"> |
| 120 | + @foreach ($users as $user) |
| 121 | + {{ $user->name }} |
| 122 | + @endforeach |
| 123 | +</div> |
| 124 | + |
| 125 | +{{ $users->links() }} |
| 126 | +``` |
| 127 | +**links**Metode akan membuat link ke seluruh halaman dalam hasil set. Masing-masing tautan ini sudah akan berisi pagevariabel string kueri yang tepat . Ingat, HTML yang dihasilkan oleh linksmetode ini kompatibel dengan kerangka kerja Tailwind CSS . |
| 128 | +## Metode Instance Paginator dan LengthAwarePaginator |
| 129 | +Setiap instance paginator memberikan informasi pagination tambahan melalui metode berikut: |
| 130 | +| Metode | Deskripsi | |
| 131 | +| --- | --- | |
| 132 | +|$paginator->count() |Dapatkan jumlah item untuk halaman saat ini.| |
| 133 | +|$paginator->currentPage() |Dapatkan nomor halaman saat ini.| |
| 134 | +|$paginator->firstItem() |Dapatkan nomor hasil item pertama dalam hasil.| |
| 135 | +|$paginator->getOptions() |Dapatkan opsi paginator.| |
| 136 | +|$paginator->getUrlRange($start, $end) |Buat rentang URL pagination.| |
| 137 | +|$paginator->hasPages() |Tentukan apakah ada cukup item untuk dibagi menjadi beberapa halaman.| |
| 138 | +|$paginator->hasMorePages() |Tentukan apakah ada lebih banyak item di penyimpanan data.| |
| 139 | +|$paginator->items() |Dapatkan item untuk halaman saat ini.| |
| 140 | +|$paginator->lastItem() |Dapatkan nomor hasil item terakhir dalam hasil.| |
| 141 | +|$paginator->lastPage() |Dapatkan nomor halaman dari halaman terakhir yang tersedia. (Tidak tersedia saat menggunakan simplePaginate).| |
| 142 | +|$paginator->nextPageUrl() |Dapatkan URL untuk halaman berikutnya.| |
| 143 | +|$paginator->onFirstPage() |Tentukan apakah paginator ada di halaman pertama.| |
| 144 | +|$paginator->perPage() |Jumlah item yang akan ditampilkan per halaman.| |
| 145 | +|$paginator->previousPageUrl() |Dapatkan URL untuk halaman sebelumnya.| |
| 146 | +|$paginator->total() |Tentukan jumlah total item yang cocok di penyimpanan data. (Tidak tersedia saat menggunakan simplePaginate).| |
| 147 | +|$paginator->url($page) |Dapatkan URL untuk nomor halaman tertentu.| |
| 148 | +|$paginator->getPageName() |Dapatkan variabel string kueri yang digunakan untuk menyimpan halaman.| |
| 149 | +|$paginator->setPageName($name) |Setel variabel string kueri yang digunakan untuk menyimpan halaman.| |
| 150 | +## Metode Instance Paginator Kursor |
| 151 | +Setiap instance paginator kursor memberikan informasi pagination tambahan melalui metode berikut: |
| 152 | + |
| 153 | +|metode |Deskripsi| |
| 154 | +|---|---| |
| 155 | +|$paginator->count() |Dapatkan jumlah item untuk halaman saat ini.| |
| 156 | +|$paginator->cursor() |Dapatkan instance kursor saat ini.| |
| 157 | +|$paginator->getOptions() |Dapatkan opsi paginator.| |
| 158 | +|$paginator->hasPages() |Tentukan apakah ada cukup item untuk dibagi menjadi beberapa halaman.| |
| 159 | +|$paginator->hasMorePages() |Tentukan apakah ada lebih banyak item di penyimpanan data.| |
| 160 | +|$paginator->getCursorName() |Dapatkan variabel string kueri yang digunakan untuk menyimpan kursor.| |
| 161 | +|$paginator->items() |Dapatkan item untuk halaman saat ini.| |
| 162 | +|$paginator->nextCursor() |Dapatkan instance kursor untuk set item berikutnya.| |
| 163 | +|$paginator->nextPageUrl() |Dapatkan URL untuk halaman berikutnya.| |
| 164 | +|$paginator->onFirstPage() |Tentukan apakah paginator ada di halaman pertama.| |
| 165 | +|$paginator->perPage() |Jumlah item yang akan ditampilkan per halaman.| |
| 166 | +|$paginator->previousCursor() |Dapatkan instance kursor untuk set item sebelumnya.| |
| 167 | +|$paginator->previousPageUrl() |Dapatkan URL untuk halaman sebelumnya.| |
| 168 | +|$paginator->setCursorName() |Atur variabel string kueri yang digunakan untuk menyimpan kursor.| |
| 169 | +|$paginator->url($cursor) |Dapatkan URL untuk instance kursor tertentu.| |
0 commit comments