URL SEO Friendly Dengan Class PHP Router

 Author : hadinug, 18 February, 2014, Komentar



Bisa dibilang tahun ini dan beberapa tahun belakangan adalah tahunnya PHP. Mengapa demikian?,  hal ini bisa kita lihat marak nya framework-framework PHP dan Content Management System PHP yang terus bermunculan satu persatu. Dan kalau kita amati, salah satu fitur yang menonjol dari beberapa framework dan CMS adalah URL nya yang SEO Friendly spt: http://example.com/post/read/hello-world, mereka juga tidak menggunakan lagi model PHP konvensional yang mengunakan prameter query string (?) pada url dan lebih fokus ke OOP pada pembuatan modul nya.



Dan saya yakin pasti temen-teman yang pernah menggunakan PHP Framework pingin tau bagaimana dari sebuah class dan method yang kita buat ketika di panggil di URL bisa dijalankan dan dilihat hasilnya. Sebenarnya ini haya sedikit permainan trik dan intrik pada sebuah class sebut saja namanya class Router.php yang mengubah nilai parameter pada URL sebagai class, method dan paramter.


<?php
/**
 * @author Hadi Nug <hadinug.net>
 * @name Router Class
 * @uses Make your class to be router in URL
 * @since version 1.0
 */

class Router {

    public $_uri = false;  // SERVER REQUEST URI 

    public function __construct() {
        $this->_uri = isset($_GET['uri']) ? strip_tags(trim(preg_replace("//$/", "", ($_GET['uri'])))) : '/';
    }

    /**
     * get the parameter uri in array
     * @return type 
     */
    public function _params() {
        //http://example.com/class/method/parameters
        $args = array(); // define argument as array
        $ar = explode('/', $this->_uri); // split or explode the uri
        for ($i = 0; $i < count($ar); $i++) {
            if ($i > 1) {
                $args[] = $ar[$i];
            }
        }
        return $args;
    }

    function _detect() {
        $_uri = $this->_uri;
        if ($_uri != null) {
            $_u = explode('/', $_uri);
            $cls = ucfirst($_u['0']);
            if (is_file(APPPATH . $cls . EXT)) {
                require_once APPPATH . $cls . EXT;
                $c = new $_u['0']();
                $args = $this->_params();
                if (method_exists($c, $_u['1'])) {
                    $c->$_u['1'](
                            isset($args['0']) ? $args['0'] : '',
                            isset($args['1']) ? $args['1'] : '',
                            isset($args['2']) ? $args['2'] : '',
                            isset($args['3']) ? $args['3'] : '',
                            isset($args['4']) ? $args['4'] : '',
                            isset($args['5']) ? $args['5'] : '',
                            isset($args['6']) ? $args['6'] : '',
                            isset($args['7']) ? $args['7'] : ''
                        // add more.....
                    );
                } else {
                    include '404.php';
                }
            } else {
                include '404.php';
            }
        }
    }

}

?>

Tentunya kita juga butuh sedikit permainan di file .htaccess yang nanti nya akan kita gunakan untuk mengubah nilai parameter setelah main URL menjadi variable request $_GET uri yang di kelola pada class Router.php.


<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /myframework/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?uri=$1 [QSA,L] 
</IfModule> 
<IfModule !mod_rewrite.c>
    ErrorDocument 404 
</IfModule>  


Dan pada index.php kita tambahkan skrip untuk menginstasiasi class Router.php berikut selengkap nya:


<?php
// The PHP file extension 
define('EXT', '.php');
// base path aplication
$application_path = 'app';
// The path to the "application" folder
if (is_dir($application_path)) {
    define('APPPATH', $application_path . '/');
} else {
    if (!is_dir(BASEPATH . $application_path . '/')) {
        exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: " . SELF);
    }
    define('APPPATH', BASEPATH . $application_path . '/');
}
include 'Router.php';
$r = new Router();
$r->_detect();

Oke sampai sini sudah bisa digunakan dan dimplementasikan pada sebuah class yang nantinya akan kita panggil di alamat URL. Hampir mirip pada kebanyak framework pada umumnya, kita akan mencoba membuat class Hello.php yang memiliki 2 buah method yang nantinya akan kita panggil pada url spt berikut: 

  • http://localhost/myframework/hello/index
  • http://localhost/myframeworl/hello/say/hello world

Caranya sangat mudah kita cukup membuat sebuah class Hello.php pada APP direktori yang pada index.php kita jadi kan sebagai PATH yang berisi file class untuk di eksekusi. Strukturnya bisa dilihat seperti gambar berikut:



Sedangkan pada class Hello.php kita isikan kode berikut:

<?php 
/**
 * Description of Hello
 *
 * @author user
 */
class Hello { 
    
    public function index(){    
        print "I just try, and it's work!";
    
    }
    
    public function say($text){
        print $text;
    }
}
 

Kemudian jalankan pada broser URL anda http://localhost/myframework/hello/index, maka keluarannya adalah "I just try, and it's work!" dan pada method say dibutuhkan sebuah paramter, misal pada URL kita ketikkan http://localhost/myframework/hello/say/hello world,  maka keluarannya adalah "hello world".


Dengan kata lain pada alamat url yang kita panggil sebenarnya adalah http://localhost/myframework/nama_class/nama_method/parameter1/parameter2/dst...Asik bukan?, saya berharap dari hal sederhana yang saya contoh kan ini, bisa menginspirasi teman-teman pembaca webiste ini. Untuk link download file nya bisa di ambil disini



 
Bagikan halaman ke sosial media
 
Tags :   php       

Tentang Penulis

writer hadinug
Web Developer di PT. Yafii Solusi Internasional

Link: http://ysi.co.id

   Komentar Anda