URL Ramah Mesin Pencari
From Joomla! Documentation
Ramah Mesin Pencari (SEF), terbaca-manusia atau URL bersih adalah URL logis untuk manusia dan mesin pencari, sebab ia memaparkan dengan jelas jalur suatu halaman. Sejak versi 1.5, Joomla! telah mampu membuat dan menganalisa URL dengan berbagai format, termasuk URL SEF. Ia tidak tergantung lagi pada eksekusi penulisan ulang URL oleh server web, bahkan hal ini bekerja dengan baik ketika Joomla! berjalan di atas server non-Apache yang memiliki modul mod_rewrite. URL SEF mengikuti pola-pola tertentu, dimana pengguna bisa menentukan teks pendek (alias) yang deskriptif untuk masing-masing segmen URLnya.
Secara internal, bagian lokal URL SEF (bagian setelah nama domain) disebut rute. Adapun membuat dan memproses URL SEF berpedoman pada ruting, dan kode yang berhubungan dengannya disebut ruter.
Contoh ruting yang baik adalah URL artikel "Selamat Datang ke Joomla!" yang ada di contoh data.
- Tanpa menyalakan URL SEF, URLnya adalah sebagai berikut:
http://www.domain_anda.com/index.php?option=com_content&view=article&id=1:selamat-datang-ke-joomla&catid=1:berita-terkini&Itemid=50
- Dengan menyalakan URL SEF dan mod_rewrite padam, adalah sebagai berikut:
http://www.domain_anda.com/index.php/berita/1-berita-terkini/1-selamat-datang-ke-joomla
- Dengan menyalakan URL SEF dan mod_rewrite, adalah sebagai berikut:
http://www.domain_anda.com/berita/1-berita-terkini/1-selamat-datang-ke-joomla
URL ramah mesin pencari bisa diaktifkan dengan menyalakan opsi URL Ramah Mesin Pencari di Konfigurasi Global. Opsi ini menyala secara standar sejak Joomla! 1.6. Lihat Mengaktifkan Ramah Mesin Pencari (SEF) untuk informasi selengkapnya.
FAQ
Apa maksud angka di dalam URL?
Bila kita bandingkan URL lama dengan yang baru, kita bisa lihat angka-angka di URL lama seperti contoh berikut.
http://www.domain_anda.com/index.php?option=com_content&view=article&id=1:selamat-datang-ke-joomla&catid=1:berita-terkini&Itemid=50
meskipun demikian, ia juga terdapat di URL baru:
http://www.domain_anda.com/berita/1-berita-terkini/1-selamat-datang-ke-joomla
Angka-angka ini adalah parameter-parameter yang diperlukan oleh Joomla! untuk mendapatkan URL internal dan untuk menampilkan halaman yang ingin anda lihat. (Dalam hal ini, angka yang pertama adalah ID kategori, yang kedua adalah ID artikel).
Tidak ada lagi index.php
di dalam URL. Bolehkah saya menghapus berkasnya sekarang?
Jangan! URLnya mungkin sudah tidak mengandung index.php
lagi, tapi secara internal, mod_rewrite hanya akan bekerja dengannya, mengalihkan jalur asli tanpa memperlihatkannya kepada anda.
Apa itu nilai Alias? Dan bagaimana hal itu dibuat?
Bidang Alias terletak di samping bidang Judul pada Artikel, Kategori, Bagian dan Butir Menu. Joomla! membuat alias secara otomatis. Alias yang otomatis dimulai dengan judulnya. Semua huruf besar digantikan dengan huruf kecil. Spasi dan karakter spesial tidak diizinkan di dalam suatu URL; maka mereka digantikan dengan tanda garis/strip (-).
Saya ingin menentukan nilai Alias saya sendiri
Jika anda tidak menyukai alias yang disediakan oleh Joomla, anda bisa masukkan nilai alias anda sendiri ke dalam bidang tersebut. Banyak yang percaya bahwa dengan memakai kata kunci yang baik di dalam URL maka hal itu akan membantu optimalisasi mesin pencari. Anda bisa melakukannya dengan memasukkan sebagian kata kunci tersebut sebagai Judul, dan biarkan Joomla! membuatkan aliasnya untuk anda, atau buat alias anda sendiri.
Bagaimana Alias digunakan di dalam URL?
Untuk butir menu, Joomla! memperlakukan alias sebagai slug URL. Anggaplah anda menggunakan opsi pertama dari dua opsi URL SEF seperti yang diterangkan di atas, lalu anda buat sebuah butir menu yang disebut "Produk". URL anda akan seperti ini: contoh.com/produk.
Joomla! juga menggunakan nilai-nilai kunci primer data yang ada di dalam URL untuk mengarahkan ruter ke halaman yang benar. Melanjutkan contoh sebelumnya, jika butir menu produk anda dibuat untuk Artikel/Blog Kategori, maka tautan Judul Artikel dan/atau tautan Baca Selengkapnya akan memiliki tiga bagian:
- URL butir menunya - contoh.com/produk
- Ditambah, kunci primer Kategori dan alias Kategori - 32-buah
- Ditambah, kunci primer untuk Artikel dan alias Artikel - 1-apel
Maka URL selengkapnya adalah: http://contoh.com/produk/32-buah/1-apel
Dapatkah saya membuang angka-angka di dalam URL SEF
Angka-angka di dalam URL SEF dibutuhkan oleh ruter Joomla! untuk mengetahui bagaimana mengarahkan trafik situs web. Nanti setelah logika ruter telah stabil, plugin sistem pihak ketiga yang sederhana dapat dikembangkan untuk menambah kemampuan ruter dengan beberapa pilihan lainnya. Pada saat itu, angka-angka sepertinya akan dibuang dari URL.
Format Rute dan Mekanisme Ruting
Bagian ini menjelaskan mekanisme ruting inti (bawaan) Joomla. Ekstensi-ekstensi ruting mungkin dapat menggantikan pembuatan rute pada sistem anda.
Format Rute
Untuk lebih dapat menjelaskan mekanisme ruting Joomla, pertama-tama perlu ditekankan apa yang yang dimaksud dengan rute. Anggaplah Joomla! telah dipasang di http://contoh.com/situs/pertama/. Jalur pemasangan biasanya mengacu pada apa yang disebut URL dasar (base URL). Contoh URL http://contoh.com/situs/pertama/produk/32-buah/1-apel
. Jalur pertama URL ini adalah apa yang disebutkan sebelumnya, URL dasar, dan tidak ada yang dapat menggantinya baik itu Joomla! maupun komponen ruter lainnya. Bagian kedua, produk/32-buah/1-apel
, adalah rute yang terdiri atas tiga segmen.
Segmen pertama rute (untuk URL biasa) adalah alias butir menu. URL SEF dirutekan melalui butir menu itu. Segmen yang lain ditentukan seutuhnya oleh ruter komponen yang menyediakan jenis butir menu. Jenis butir menu "Kategori - Blog" contohnya, ia disediakan oleh komponen Konten, sebab itu ruter komponen bertanggungjawab atas pembuatan dan hasil segmen-segmen selanjutnya.
Bisa saja (untuk ekstensi-ekstensi) meminta sistem untuk membuat sebuah rute tanpa harus menyediakan sebuah butir menu yang akan dilalui rute. Dalam kasus seperti itu, sistem biasanya akan memutuskan untuk membuat rute spesial yang memiliki kata component
sebagai segmen pertamanya. Rute-rute ini dibuat menggunakan format yang tetap: nama komponennya (tanpa didahului com_
) akan dipilih sebagai segmen kedua, dan parameter-parameter lainnya sebagai segmen yang ketiga.
Batasan
Penting untuk diingat bahwa, membuat sebuah butir menu adalah satu-satunya cara bagi pengguna Joomla! untuk menentukan rute yang akan mengarah ke komponen tertentu. Meskipun, mungkin saja membuat rute tanpa menampilkannya di situs (di dalam sebuah menu). Cara yang sering diterapkan adalah membuat sebuah butir menu di dalam sebuah menu yang tidak ditampilkan dimanapun. Seperti menu yang biasanya disebut menu tersembunyi.
Di atas disebutkan bahwa, adalah tidak mungkin membuat satu komponen yang bertanggungjawab mengendalikan seluruh rute. Sebagai contoh, adalah tidak mungkin menentukan URL http://contoh.com/alias
untuk harus menampilkan butir Konten dengan alias alias
, dimana alias
bisa berarti apa saja. Kalau hal ini perlu dilakukan untuk jumlah artikel yang sedikit, butir menu tersebut bisa dibuat secara manual. Diluar itu, sebuah ruting ekstensi adalah hal yang wajib.
Mekanisme ruting ini meskipun tidak sefleksibel pengguna tapi kadang diperlukan. Dengan kata lain, hal ini punya keuntungan yang besar: mengurangi kesempatan rute yang tidak jelas (rute yang bisa mengarah ke dua halaman yang berbeda). Karena segmen pertama rute selalu sebuah alias butir menu, sistem akan mengetahui ruter komponen mana yang harus dianalisa dengan cepat.
Detail Implementasi
Kendali Rute
Bagian ini menjelaskan implementasi ruting. Apabila anda adalah seorang pengembang komponen, lihat Mendukung URL SEF di dalam komponen anda.
Rute Joomla dibuat dan dipecahkan oleh kelas JRouter. Kelas ini terlihat di pangkal komponen dari komponen yang aktif saat ini (secara khusus ada di parameter opsi
di string kueri) dan termasuk berkas router.php
di pangkal direktori komponen. Hal ini kemudian memanggil salah satu dari dua fungsi: satu untuk membuat URL SEF dan satunya unuk mengartikan URL SEF.
Kelas JRouter digantikan oleh CMS Joomla! di /includes/router.php
. Di dalam berkas ini, pembuatan dan analisa fungsinya digantikan untuk secara baik membangun dan menganalisa URL untuk CMS Joomla.
Berkas router.php
di masing-masing komponen (sebagai contoh, /components/com_content/router.php
) harus mengandung dua fungsi berikut ini:
- ContentBuildRoute - ini membangun URL SEF
- Parameter
- $query - ini adalah nama array yang mengandung variabel "querystring".
- Mengembalikan: sebuah array segmen dimana masing-masing segmen dipisahkan oleh tanda '/' saat nanti digabungkan untuk membuat URL sebenarnya (butir di dalam array harus mengandung karakter '/').
- Parameter
- ContentParseRoute - ini mengartikan sebuah URL SEF
- Parameter
- $segments - ini adalah array yang mengandung segemn URL yang diminta.
- Mengembalikan: sebuah nama => nilai array dari variabel "querystring" yang memetakan.
- Parameter
Plugin SEF
Plugin Sistem - SEF Joomla mewarisi JPlugin
dan mengimplementasikan fungsi onAfterRender()
. Dalam fungsi ini respon "body" akan dikirimkan ke browser untuk kemudian dikembalikan dengan JResponse::getBody()
. Respon "body" kemudian mencari tautan yang mengandung /index.php...
dan menggantikannya dengan URL SEF yang benar dengan memanggil JRoute::_(url)
.
JRoute membangun URL SEF dengan memberikan contoh objek JRouter
, yang kemudian memintanya untuk membangun tautan yang benar dari yang telah dilemparkan ke dalam URL.
Pengendalian URL SEF
Secara standar, URL SEF dikendalikan oleh objek JRouterSite
(dari /includes/router.php
) dan dipanggil dengan memanggil JApplication::route()
dari index.php. Panggilan ini dibuat pada variabel $app
, yang sebenarnya adalah inisiasi dari JSite
(dari /includes/application.php
).
JApplication::route()
punya hasil yang non-destructive pada array $_GET
. Oleh sebab itu, JApplication::route()
mengatur variabel $_GET
dengan memanggil JRequest::set()
dengan menghapus benderanya dan mengaturnya ke "false". Jika nama variabel dikembalikan, dari JRouter::route()
, yang sudah terdapat di $_GET
, maka ia tidak akan menempatkan nilai tersebut ke dalam $_GET
. Hal ini memungkinkan suatu ruting kustom.
Ruting Kustom
Joomla mengizinkan anda untuk membuat mekanisme ruting sendiri. Untuk membuat mekanisme ini, anda harus memiliki plugin yang menggantikan fungsi JPlugin::onAfterInitialise()
. Fungsi ini kemudian akan menganalisa URL dan membuat variabel-variabel yang diperlukannya di $_GET
, sebelum standar ruting Joomla rangkum.
Lihat Membuat sebuah Plugin Sistem untuk menambah JRouter sebagai contohnya.