Membuat URL yang Search-Engine Friendly pada Fusebox
Kalau kita lihat website-website yang ada saat ini, kebanyakan dari mereka menggunakan konstruksi URL yang mudah dibaca oleh mesin pencari (search engine) khususnya pada website berita. Pada dasarnya semua web server yang menyediakan fasilitas URL Rewrite dapat menimpa konstruksi URL (yang search-engine friendly) dengan URL yang sebenarnya kemudian mengarahkan(me-redirect)nya. Kali ini kita akan mengaplikasikan ini dalam template Go-Fusebox.
Sebelum memulainya, pastikan host web server Anda mengizinkan penulisan ulang URL (URL Rewrite), jika Anda bekerja dalam localhost dan Apache, Anda dapat mengubah konfigurasi httpd.conf pada direktori conf/ Apache Anda.
Untuk mengubahnya, buka file httpd.conf, kemudian cari teks berikut:
#LoadModule rewrite_module modules/mod_rewrite.so
hilangkan tanda “#” diawal baris menjadi:
LoadModule rewrite_module modules/mod_rewrite.so
simpan perubahan kemudian jalankan ulang (restart) web server Anda.
Siapkan template Go-Fusebox yang masih kosong pada root web server Anda. Buat file .htaccess pada root direktori sebagai berikut:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w]+)/([\w]+)$ index.php?go=$1.$2 [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([\w]+)/([\w]+)/(.+)$ index.php?go=$1.$2&__qs__=$3 [L]
</IfModule>
Selanjutnya kita buat fungsi untuk menangani peng-ubah-an url tersebut. Kita bisa tambahkan fuseaction pada circuit global sebagai berikut:
<fuseaction name="fancyURL"> <include template="act_fancyURL" /> </fuseaction>
siapkan juga fuse act_fancyURL, script dari act_fancyURL.php adalah sebagai berikut:
<?php
/*
@ XFA for fancy URL
@author: Yerie Piscesa <yeriepiscesa@fbxphpindonesia.com>
*/
$WebsiteURL = "localhost/fancyurl";
function XFA($xfa,$params=null,$fancy=false,$info=array()) {
$myself = $GLOBALS["myself"];
$_xfa = $GLOBALS['XFA'][$xfa];
if(is_null($_xfa)) $_xfa = $xfa;
if ($fancy) {
$ret = "http://".$GLOBALS['WebsiteURL']."/".str_replace(".","/",$_xfa);
if (!is_null($params)) {
foreach($params as $k=>$v){
$ret .= "/$v";
}
}
if (!is_null($info)) {
for($i=0;$i<count($info);$i++){
$ret .= "/".preg_replace("/\s+/","-",$info[$i]);
}
}
} else {
$ret = $myself . $_xfa;
if (!is_null($params)){
foreach($params as $k=>$v){
$ret .= "&".$k."=".$v;
}
}
}
return $ret;
}
function isFancyURL(){
return (is_null($_GET["__qs__"]) || $_GET["__qs__"] == "") ? false : true;
}
function XFA_get($paramNo){
$qs = $_GET["__qs__"];
$arrQS = explode("/",$qs);
return $arrQS[$paramNo-1];
}
?>
Hal yang perlu diperhatikan adalah variabel $WebsiteURL, variabel tersebut berisi root domain website Anda. Jika Anda bekerja dalam domain publik, $WebsiteURL dapat berisi “www.fbxphpindonesia.com” atau “demo.fbxphpindonesia.com”
Selanjutnya adalah menambahkan tag <base> kedalam layout website. Buka fuse layout Anda, kemudian pada section <head> tambahkan kode berikut:
<base href="http://<?php echo $WebsiteURL; ?>/"/>
pastikan kode diatas ditambahkan diatas tag-tag <link>,<script> dan sejenisnya yang memiliki atribut href dan src.
Selanjutnya kita pasang pada fusebox.xml. Buka file fusebox.xml.php Anda pada direktori apps/index, kemudian tambahkan kode berikut pada tag <preprocess>
<fuseaction action="global.fancyURL"/>
atau lebih lengkapnya:
<preprocess>
<fuseaction action="global.init"/>
<fuseaction action="db.open"/>
<fuseaction action="global.fancyURL"/>
</preprocess>
Langkah persiapan telah kita lakukan semua, selanjutnya adalah membuat halaman uji coba. Untuk itu buatlah circuit page pada direktori index, sebelumnya tambahkn dulu pada fusebox.xml
<circuit alias="page" path="circuits/page/"/>
Buat circuit.xml.php pada direktori circuit tersebut:
<?xml version="1.0" encoding="utf-8"?> <circuit access="public"> <fuseaction name="view"> <include template="qry_view"/> <include template="dsp_view" contentvariable="fbx_maincontent"/> </fuseaction> </circuit>
Buat juga fuse-fuse yang terlibat dalam fuseaction “view”:
@qry_view.php
<?php
$fbx_pagetitle = "Fancy URL Test";
if (isFancyURL()) {
$pageID = XFA_get(1);
} else {
$pageID = $_GET["id"];
}
switch($pageID) {
case "1":
$fbx_pagetitle = "Halaman Satu";
$content = "Isi Halaman Page Satu";
break;
case "2":
$fbx_pagetitle = "Halaman Dua";
$content = "Isi Halaman Page Dua";
break;
case "3":
$fbx_pagetitle = "Halaman Tiga";
$content = "Isi Halaman Page Tiga";
break;
case "4":
$fbx_pagetitle = "Halaman Empat";
$content = "Halaman ini URLnya biasa aja";
break;
default:
$fbx_pagetitle = "Halaman";
$content = "Pilih halaman disamping";
break;
}
?>
@dsp_view.php
<table width="100%">
<tr>
<td width="20%" valign="top">
<a href="<?php echo XFA("page.view",array("id"=>1),true,array("Halaman Satu")); ?>">Halaman Satu</a> <br/>
<a href="<?php echo XFA("page.view",array("id"=>2),true,array("Halaman Dua")); ?>">Halaman Dua</a> <br/>
<a href="<?php echo XFA("page.view",array("id"=>3),true,array("Halaman Tiga","Tambahan Info")); ?>">Halaman Tiga</a> <br/>
<a href="<?php echo XFA("page.view",array("id"=>4),false); ?>">Halaman Empat</a> <br/>
</td>
<td width="80%" valign="top">
<?php echo $content; ?>
</td>
</tr>
</table>
Selanjutnya tinggal mencobanya pada browser, arahkan ke http://localhost/fancyurl/page/view
atau dapat dilihat demonya disini: http://demo.fbxphpindonesia.com/page/view
Download source nya disini: http://fbxphpindonesia.com/data/fancyurl.zip
Happy Fuseboxing
Yth. Mas/Mbak
Setelah source code ‘fancyurl’ dicoba dengan menggunakan xampp versi 1.7.7 untuk OS Windows XP, terdapat informasi kesalahan sbb :
indeks “__qs__” katanya undefine pada act_fancyURL.php
dan
indeks “id” katanya juga undefine pada qry_view.php
Mohon penjelasan mengenai hal tsb di atas. Terima kasih atas tutorialnya yg sangat membantu.
@raidun Undefine index terjadi karena ada indeks array yang tidak di definisikan. Untuk mengatasinya dengan melakukan cek indeks array terlebih dahulu, dalam contoh fancyurl saya dapat ditambahkan pada baris pertama file act_fanyURL.php kode berikut:
if (!isset($_GET['__qs__'])) $_GET['__qs__'] = “”;
ulangi kode diatas pada setiap indeks array (termasuk dalam $_SESSION, $GLOBALS, dan sejenisnya).
Cara paling mudah adalah dengan mengubah setting file php.ini, pada bagian error_reporting, lakukan pengaturan sebagai berikut:
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
jangan lupa restart xampp/apache setelah menyimpan file php.ini.
Semoga jawaban ini membantu
Weh… Gak kalah sama codeigniter neh… Mangstab!! Thx for share! Ngomong2 Om mimin, bantu review kelemahan2annya juga dunkz… Terutama yg berhubungan kemungkinan2 akan metode serangan para dedemit maya… Trims… Membantu banget site ini