Lagi-lagi, ada pertanyaan bagus mengenai artikel Mengenal SEO-Friendly URL di Aplikasi Web yang Dihasilkan oleh PHPMaker 2021. Apakah kita bisa membuat URL yang SEO-Friendly tanpa menggunakan nama Tabelnya?
Pertanyaan yang bagus, karena jawabannya semakin membuktikan betapa powerful dan flexible-nya PHPMaker 2021. Tentu saja, jawabannya bisa. Bagaimana caranya? Hehe… sabar… sabar… Sebelum mengetahui caranya, ada baiknya kita bahas dulu URL yang digunakan oleh PHPMaker 2021.
Seperti yang sudah kita ketahui melalui artikel di atas tadi, ada dua bentuk URL yang sudah disediakan oleh PHPMaker 2021, yaitu:
app/modelslist app/models/list
Dalam contoh di atas, diasumsikan kita menggunakan satu table di database yang bernama models.
Cara pertama dan yang secara standar dipakai oleh PHPMaker 2021 adalah:
app/modelslist
Artinya, di cara pertama ini, nama table dan jenis halamannya digabung.
Sedangkan cara kedua, adalah dengan memisahkan nama table dengan jenis halamannya, seperti contoh berikut:
app/models/list
Mungkin ada yang bertanya-tanya, bagaimana cara PHPMaker 2021 mendefinisikan kedua bentuk URL di atas? Jawabannya bisa kita lihat kode yang sudah di-generate oleh PHPMaker 2021 di dalam file src/routes.php.
Perhatikan kode yang ini pada file tersebut:
// models $app->any('/modelslist[/{ID}]', ModelsController::class . ':list')->add(PermissionMiddleware::class)->setName('modelslist-models-list'); // list ... $app->group( '/models', function (RouteCollectorProxy $group) { $group->any('/' . Config("LIST_ACTION") . '[/{ID}]', ModelsController::class . ':list')->add(PermissionMiddleware::class)->setName('models/list-models-list-2'); // list ... } );
Karena routes untuk membuat URL yang digunakan table models tadi banyak, dan supaya tidak bingung dengan kode lainnya, sengaja saya potong kode di atas, dengan memberi tanda tiga titik (…).
Kode di atas menjelaskan bahwa ada dua cara untuk membuat dua bentuk URL seperti yang sudah kita contohkan sebelumnya. Perhatikan kode yang $app->any dan seterusnya, itu adalah kode untuk membuat URL cara pertama.
Sedangkan untuk URL yang cara kedua, menggunakan kode yang $app->group dan seterusnya. Sudah tahu perbedaannya kan?
Kalau sudah tahu, berarti itu artinya kita bisa membuat URL yang cara ketiga, sesuai keinginan kita. Di sinilah sekaligus menjawab pertanyaan di awal artikel ini tadi.
Katakanlah kita ingin membuat URL yang mirip cara kedua, tapi nama table-nya kita samarkan (dalam hal ini kita ganti dari kata models menjadi data-model), sehingga bentuknya menjadi seperti ini:
app/data-model/list
Cukup tambahkan kode berikut ke dalam server event Route_Action:
$app->group( '/data-model', function (\Slim\Routing\RouteCollectorProxy $group) { $group->any('/' . Config("LIST_ACTION") . '[/{ID}]', ModelsController::class . ':list')->add(PermissionMiddleware::class)->setName('data-model/list-models-list-3'); // list ... } );
Tentu saja jika kita ingin menambahkan routes untuk halaman selain List, yaitu Add, Edit, View, dan Search, maka ganti kode tiga titik di atas dengan kode untuk halaman-halaman tersebut, dari dalam file src/routes.php tadi.
Sampai di sini, pertanyaan di awal artikel ini sudah terjawab sekaligus tersolusikan. Sekarang kita sudah bisa membuat URL yang SEO-Friendly, tanpa selalu menggunakan nama table aslinya.
Betapa menyenangkannya menggunakan PHPMaker 2021, bukan?
Dendi mengatakan
Terimakasih bang, sudah dibuatkan artikel khusus atas pertanyaan saya.
Sudah saya coba bang, tapi masih ada kendala , Link halaman List masih ngikut seperti di contoh artikel sebelumnya.
Apa harus ada yang diubah di MenuItem_Adding nya juga ya ?
Masino Sinaga mengatakan
Iya betul, harus tetap menambahkan kode di server event MenuItem_Adding, karena standar URL nya menggunakan cara pertama yang modelslist untuk mengganti link di bagian Item Menu pada Sidebar atau Navbar.
Sedangkan link yang terdapat di halaman List, bisa menggunakan server event Row_Rendered, seperti yang sudah dibahas di artikel yang satunya tadi.
Nanda mengatakan
maaf bang Masino, ternyata untuk perlakuan Route untuk Custom File beda lagi ya ?
untuk mengambil ID dari sebuah Custom File.
misalnya kita akan menampilkan Output dari sebuah Custm File yang mengambil Nilai ID dari sebuah tabel/ List.
untuk ambil nilainya, bisa memanfaatkan Row_Rendered/ ListOptions_Rendered dari Halaman List untuk diarahkan ke Halaman Custom File tadi.
sampai disini engga ada masalah.
misalnya saya buat Custom File dengan nama detail_siswa.php (nis, nama, alamat)
secara Standar (yang saya tahu) untuk menampilkan Halaman tersebut dengan ambil nilai “nis” bisa memanfaatkan Page_Load dari Custom File terkait, sehingga URL menjadi :
detailsiswa.php?nis=005 secara fungsi sudah bisa berjalan.
tapi, apakah kita bisa merubah URL tersebut menjadi detail-siswa/nis/005 ?
dengan memanfaatkan Route_Action seperti artikel diatas ?
Masino Sinaga mengatakan
Iya, jelas beda.
Custom File sama sekali kosong dan tidak menggunakan Table Class seperti bawaan asli yang di-generate oleh PHPMaker dari object Tables/Views di database.
Saya belum pernah coba untuk mengubah route-nya menggunakan Route_Action. Tapi kalau melihat dari fungsi server event tersebut, harusnya bisa. Silahkan dicoba saja dulu, kabarkan hasilnya ya.
Nanda mengatakan
masih saya coba nih Bang Masino
Step 1 buat Route baru :
Step 2 :
Row Rendered Tabel Siswa :
$this->nis->ViewValue =”nis->CurrentValue.”‘>NIS“;
Nama File asli : detailsiswa.php
Step 3 (di halaman detailsiswa.php )
// saya coba ambil nilai GET “nis” dari Step 2
$nis = $_GET[“nis”];
$sql = “SELECT * from siswa WHERE nis=’$nis’ “;
// bla bla bla….
sampai disini berhasil menampilkan data.
Hasil URL di browser :
…./siswa?nis=005
namun jika saya ubah URL menjadi :
$this->nis->ViewValue =”nis->CurrentValue.”‘>NIS“;
hasil yang diharapkan :
…./siswa/nis/005
nilai ID/ “nis” menjadi tidak terbaca “Undefined index” saat ambil nilai $_GET[“nis”] di halaman Custom File tersebut.
namun jika dicoba diberi nilai Manual, misalnya $nis = ‘005’; hasilnya bisa.
intinya sementara masalah ada di pengambilan nilai $_GET (baik saat ditulis di PageLoad maupun ketika ditulis langsung di Server Event Content dari Custom File tersebut)
Masino Sinaga mengatakan
Coba trik berikut:
How to Get Route Values from URL (v2021).