Membuat Paginator Manual Di Jekyll
Membuat paginasi untuk blog Jekyll tanpa menggunakan plugin sangat mungkin dilakukan, tetapi memerlukan pendekatan yang berbeda dan sedikit lebih banyak pekerjaan manual. Karena GitHub Pages memiliki batasan pada plugin yang didukung, ini adalah solusi yang bagus jika Anda ingin kontrol penuh atau jika Anda memiliki alasan khusus untuk tidak menggunakan jekyll-paginate atau jekyll-paginate-v2.
Konsep dasarnya adalah Anda akan membuat halaman HTML statis untuk setiap halaman paginasi, alih-alih mengandalkan plugin untuk membuatnya secara dinamis.
Berikut adalah cara melakukannya:
-
Persiapan Struktur Data (Posts)
Pastikan semua postingan blog Anda berada di folder
_postsdengan format penamaan yang benar (YYYY-MM-DD-judul-postingan.md). Paginasi akan berdasarkan ini. -
Buat Skrip Pembantu (Opsional, tapi Direkomendasikan)
Karena Anda tidak menggunakan plugin, Anda perlu cara untuk menentukan postingan mana yang akan muncul di setiap halaman, dan juga berapa banyak halaman yang akan ada. Anda bisa melakukan ini secara manual, tapi akan lebih efisien jika Anda memiliki skrip kecil (misalnya, Python atau Ruby) yang membantu Anda menghitung dan menentukan ini.
Namun, untuk tujuan Jekyll murni tanpa plugin, kita akan memanfaatkan kemampuan Liquid dan data koleksi.
-
Konfigurasi
_config.ymlAnda tidak perlu mengaktifkan plugin paginasi. Hanya pastikan Jekyll tahu cara mengurutkan postingan Anda.
# _config.yml collections: posts: output: true # Pastikan postingan dirender permalink: /:categories/:year/:month/:day/:title/ # Contoh permalink untuk postingan -
Buat Template Halaman Paginasi Kustom
Ini adalah bagian inti dari solusi tanpa plugin. Anda perlu membuat halaman untuk setiap nomor halaman.
Misalkan Anda ingin 5 postingan per halaman dan path-nya adalah
/blog/pageX/.Langkah A: Buat File
index.html(atau index.md) di Folder BlogIni akan menjadi halaman pertama blog Anda.
blog/index.html--- layout: default title: Blog Terbaru --- {% assign posts_per_page = 5 %} {% assign total_posts = site.posts | size %} {% assign total_pages = total_posts | divided_by: posts_per_page %} {% comment %} Tambahkan 1 jika ada sisa postingan {% endcomment %} {% if total_posts | modulo: posts_per_page > 0 %} {% assign total_pages = total_pages | plus: 1 %} {% endif %} {% assign current_page = 1 %} {% assign offset = 0 %} {% assign paginated_posts = site.posts | slice: offset, posts_per_page %} <div class="posts"> {% for post in paginated_posts %} <h2><a href="{{ post.url | relative_url }}">{{ post.title }}</a></h2> <p class="post-meta">{{ post.date | date: "%b %-d, %Y" }}</p> <div> {{ post.excerpt }} <a href="{{ post.url | relative_url }}">Baca Selengkapnya</a> </div> {% endfor %} </div> <div class="pagination"> {% comment %} Tautan Halaman Sebelumnya (tidak ada di halaman 1) {% endcomment %} <span class="previous disabled">Sebelumnya</span> {% comment %} Tautan Halaman Saat Ini {% endcomment %} <span class="page_number">Halaman: {{ current_page }} dari {{ total_pages }}</span> {% comment %} Tautan Halaman Berikutnya {% endcomment %} {% if total_pages > 1 %} <a href="{{ '/blog/page2/' | relative_url }}" class="next">Berikutnya</a> {% else %} <span class="next disabled">Berikutnya</span> {% endif %} </div>Langkah B: Buat Folder dan File untuk Setiap Halaman Paginasi
Ini adalah bagian manualnya. Anda harus membuat folder
pageXdi dalam blog untuk setiap halaman.blog/page2/index.html--- layout: default title: Blog Terbaru - Halaman 2 --- {% assign posts_per_page = 5 %} {% assign total_posts = site.posts | size %} {% assign total_pages = total_posts | divided_by: posts_per_page %} {% if total_posts | modulo: posts_per_page > 0 %} {% assign total_pages = total_pages | plus: 1 %} {% endif %} {% assign current_page = 2 %} {% assign offset = posts_per_page | times: current_page | minus: posts_per_page %} {% assign paginated_posts = site.posts | slice: offset, posts_per_page %} <div class="posts"> {% for post in paginated_posts %} <h2><a href="{{ post.url | relative_url }}">{{ post.title }}</a></h2> <p class="post-meta">{{ post.date | date: "%b %-d, %Y" }}</p> <div> {{ post.excerpt }} <a href="{{ post.url | relative_url }}">Baca Selengkapnya</a> </div> {% endfor %} </div> <div class="pagination"> {% comment %} Tautan Halaman Sebelumnya {% endcomment %} <a href="{{ '/blog/' | relative_url }}" class="previous">Sebelumnya</a> {% comment %} Tautan Halaman Saat Ini {% endcomment %} <span class="page_number">Halaman: {{ current_page }} dari {{ total_pages }}</span> {% comment %} Tautan Halaman Berikutnya {% endcomment %} {% if current_page < total_pages %} <a href="{{ '/blog/page' | append: current_page | plus: 1 | append: '/' | relative_url }}" class="next">Berikutnya</a> {% else %} <span class="next disabled">Berikutnya</span> {% endif %} </div>Ulangi ini untuk
blog/page3/index.html,blog/page4/index.html, dan seterusnya, dengan mengubahcurrent_pagedan sesuaikan tautanpreviousdannextsesuai nomor halaman.Penjelasan:
* posts_per_page: Jumlah postingan yang ingin Anda tampilkan di setiap halaman. * total_posts: Mengambil jumlah total postingan dari site.posts. * total_pages: Menghitung total halaman yang diperlukan. * current_page: Ini adalah variabel yang harus Anda ubah secara manual untuk setiap file index.html yang Anda buat. * offset: Menghitung indeks awal postingan untuk halaman saat ini. Ini adalah kuncinya: (nomor_halaman - 1) * posts_per_page. * paginated_posts = site.posts | slice: offset, posts_per_page: Ini adalah filter Liquid yang mengambil irisan (slice) dari semua postingan berdasarkan offset dan posts_per_page. * Tautan Paginasi: Anda harus secara manual menyesuaikan href untuk tautan "Sebelumnya" dan "Berikutnya" untuk setiap halaman. Gunakan relative_url untuk memastikan URL bekerja dengan benar di GitHub Pages, terutama jika situs Anda berada di subdirektori (misalnya, username.github.io/repo-name/).Kekurangan Pendekatan Tanpa Plugin:
- Manual dan Memakan Waktu: Anda harus membuat file
index.htmlterpisah untuk setiap halaman paginasi. Jika Anda memiliki ratusan postingan, ini akan menjadi pekerjaan yang sangat melelahkan. - Sulit untuk Memelihara: Setiap kali Anda menambah atau menghapus postingan, atau mengubah
posts_per_page, Anda harus menghitung ulang dan mungkin membuat ulang semua file paginasi secara manual. - Tidak Dinamis: Ini adalah solusi statis.
Kapan Menggunakan Pendekatan Ini?
- Jika Anda memiliki jumlah postingan yang sangat sedikit dan tidak sering memperbarui blog.
- Jika Anda benar-benar tidak ingin menggunakan plugin karena batasan lingkungan (seperti GitHub Pages yang tidak mendukung
jekyll-paginate-v2) dan Anda tidak ingin menggunakan GitHub Actions untuk build. - Untuk tujuan pembelajaran tentang bagaimana paginasi bekerja di balik layar.
- Manual dan Memakan Waktu: Anda harus membuat file
Rekomendasi: Gunakan GitHub Actions untuk Paginasi Plugin
Jika Anda ingin paginasi bekerja secara otomatis di GitHub Pages dan tetap menggunakan plugin jekyll-paginate-v2 (yang jauh lebih fleksibel daripada bawaan), solusi terbaik adalah menggunakan GitHub Actions.
Dengan GitHub Actions, Anda dapat mengkonfigurasi alur kerja yang akan:
- Checkout kode repositori Anda.
- Menginstal Jekyll dan semua plugin yang Anda butuhkan (termasuk
jekyll-paginate-v2). - Membangun situs Jekyll Anda secara lokal (di lingkungan GitHub Actions).
- Mendorong folder
_siteyang dihasilkan ke cabanggh-pages(atau cabangmainjika itu sumber GitHub Pages Anda).
Ini memungkinkan Anda menggunakan plugin apa pun yang Anda inginkan, dan situs Anda akan dibangun secara dinamis setiap kali Anda mendorong perubahan, tanpa perlu intervensi manual untuk setiap halaman paginasi. Ini adalah keseimbangan terbaik antara fleksibilitas plugin dan penyebaran otomatis di GitHub Pages.
Apakah Anda tertarik untuk mengetahui lebih lanjut tentang cara menyiapkan GitHub Actions untuk membangun situs Jekyll Anda?
Bonus :
cara pasang dan menggunakan jekyll paginate di blog jekyll
jekyll-paginate adalah plugin yang membagi daftar postingan blog Anda menjadi beberapa halaman, sehingga tidak semua postingan muncul di satu halaman panjang. Ini sangat penting untuk blog dengan banyak konten.
-
Memasang
jekyll-paginateMeskipun
jekyll-paginateadalah plugin bawaan, Anda tetap perlu menambahkannya ke konfigurasi Anda agar Jekyll tahu untuk menggunakannya.a. Tambahkan ke
Gemfile(Direkomendasikan)Jika Anda menggunakan
Bundler(cara standar untuk mengelola dependensi Jekyll), tambahkanjekyll-paginatekeGemfileAnda:gem install jekyll-paginateSetelah menambahkan ini, buka terminal di root folder proyek Jekyll Anda dan jalankan:
bundle installIni akan menginstal
jekyll-paginatedan dependensi lainnya.b. Tambahkan ke
_config.ymlSelanjutnya, beri tahu Jekyll untuk memuat plugin ini dengan menambahkannya ke file
_config.ymlAnda:# _config.yml plugins: - jekyll-paginate # Pagination settings paginate: 5 # Jumlah postingan yang akan ditampilkan per halaman paginate_path: "./page:num/" # Path untuk halaman paginasi. :num akan diganti dengan nomor halaman. # ... (pengaturan lain di sini) ...Penjelasan:
paginate: 5: Ini menentukan bahwa setiap halaman paginasi akan menampilkan maksimal 5 postingan. Anda bisa mengubah angka ini sesuai keinginan Anda (misalnya, 10, 3).paginate_path: "/page:num/": Ini adalah pola URL untuk halaman-halaman paginasi Anda.:numadalah placeholder yang akan diganti dengan nomor halaman (misalnya,/page2/,/page3/).- Halaman pertama (halaman 1) tidak akan menggunakan pola ini; ia akan menggunakan URL dari halaman utama yang dipaginasi (misalnya
index.htmldiroot).
-
Menggunakan Objek Paginasi di Template HTML
Anda perlu memodifikasi file HTML tempat Anda ingin menampilkan daftar postingan yang dipaginasi. Biasanya, ini adalah
index.html(untuk halaman beranda blog Anda) ataublog/index.html.a. Struktur File HTML yang Dipaginasi
Buat atau modifikasi file
index.htmlAnda (misalnya, dirootproyek Jekyll Anda):--- layout: default # Atau layout lain yang Anda gunakan (misal 'home') title: Blog Posts --- <div class="posts"> {% for post in paginator.posts %} <article class="post"> <h2><a href="{{ post.url | relative_url }}">{{ post.title }}</a></h2> <p class="post-meta"> {{ post.date | date: "%b %d, %Y" }} {% if post.author %}by {{ post.author }}{% endif %} </p> <div class="entry"> {{ post.excerpt | strip_html | truncatewords: 50 }} </div> <a href="{{ post.url | relative_url }}" class="read-more">Baca Selengkapnya</a> </article> {% endfor %} </div> <div class="pagination"> {% if paginator.previous_page %} <a href="{{ paginator.previous_page_path | relative_url }}" class="pagination-link prev"> « Sebelumnya </a> {% else %} <span class="pagination-link prev disabled">« Sebelumnya</span> {% endif %} <span class="page-info">Halaman {{ paginator.page }} dari {{ paginator.total_pages }}</span> {% if paginator.next_page %} <a href="{{ paginator.next_page_path | relative_url }}" class="pagination-link next"> Selanjutnya » </a> {% else %} <span class="pagination-link next disabled">Selanjutnya »</span> {% endif %} </div> -
Uji Secara Lokal
Sebelum mendorong ke GitHub, selalu uji situs Anda secara lokal untuk memastikan semuanya berfungsi dengan baik.
- Buka terminal di
rootfolder proyek Jekyll Anda. -
Jalankan perintah:
bundle exec jekyll serve - Buka browser Anda dan kunjungi
http://localhost:4000(atau alamat yang ditampilkan di terminal). - Gulir ke bawah halaman blog Anda. Anda seharusnya melihat navigasi paginasi. Klik tautan “Selanjutnya” atau nomor halaman untuk memastikan Anda berpindah antar halaman postingan.
- Buka terminal di
-
Deploy ke GitHub Pages (Jika Menggunakan)
Jika Anda menghosting blog Jekyll Anda di GitHub Pages, Anda tidak perlu melakukan langkah-langkah khusus tambahan setelah konfigurasi di atas. GitHub Pages secara otomatis mendukung
jekyll-paginate.- Pastikan semua perubahan sudah disimpan.
-
Tambahkan perubahan ke
Git:git add . -
Commitperubahan:git commit -m "Implement Jekyll pagination" -
Dorong perubahan ke repositori GitHub Anda:
git push origin <nama-cabang-anda> # contoh: git push origin main
GitHub Pages akan mendeteksi perubahan, membangun ulang situs Anda, dan paginasi seharusnya berfungsi di situs live Anda. Anda bisa memantau status build di tab "Actions" di repositori GitHub Anda.
Batasan jekyll-paginate
Penting untuk diingat bahwa jekyll-paginate memiliki batasan:
- Hanya Memaginasi posts: Secara default,
jekyll-paginatehanya dapat memaginasi koleksiposts. Anda tidak dapat menggunakannya langsung untuk memaginasi koleksi kustom (seperti_projects,_events) atau halaman statis berdasarkankategori/tag. - Paginasi Global: Ini adalah paginasi untuk semua postingan di situs Anda, bukan paginasi per kategori atau tag.
Jika Anda membutuhkan fitur paginasi yang lebih canggih (seperti paginasi untuk koleksi kustom atau paginasi berdasarkan kategori/tag), Anda mungkin perlu mempertimbangkan:
- Menggunakan plugin
jekyll-paginate-v2(tetapi ini tidak didukung langsung oleh GitHub Pages, jadi Anda harus membangun situs secara lokal dan mendorong output_siteke GitHub Pages, atau menggunakan GitHub Actions). - Menggunakan generator paginasi kustom dengan filter Liquid (lebih kompleks).
- Menggunakan layanan hosting lain seperti Netlify atau Vercel yang memungkinkan Anda menginstal plugin Jekyll apa pun.
Dengan mengikuti panduan ini, Anda akan dapat berhasil memasang dan menggunakan jekyll-paginate untuk membuat blog Jekyll Anda lebih mudah dinavigasi.