Thursday, October 1, 2015

Yii 1 - Mempercantik Tampilan URL

Ketika anda membuka sebuah url di yii akan menemukan tampilan URL yang tidak begitu bagus. Contohnya saja, untuk halaman sign-in, URL yang ditampilkan adalah www.namaweb.com/index.php?r=site/login. Bagi sebagian besar orang, tampilan URL ini tidak begitu normal. Dan bagi pemilik Web, URL demikian tidak akan disukai mesin pencari, alias tidak SEO-friendly.

Oleh karena itu, dalam artikel ini kita akan membahas teknik mengubah URL

Mengaktifkan Url Manager 

Untuk mengaktifkan URL supaya lebih rapi cukup buka file di protected/config/main.php lalu cari bagian yang tertulis
 // uncomment the following to enable URLs in path-format  
      /*  
      'urlManager'=>array(  
            'urlFormat'=>'path',  
            'rules'=>array(  
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',  
 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;     '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',  
 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;     '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',  
            ),  
      ),  
      */  
Cukup hilangkan comment, maka URL akan langsung berubah. Jika hanya sekadar mengubah lebih rapi, maka pekerjaan Anda sampai sini sudah selesai. Tetapi masalahnya umumnya kita harus mengubah bentuk URL yang lebih rumit sesuai kebutuhan User. Oleh karena itu, dalam artikel ini akan diajarkan bagaimana membuat rule sendiri.

Menghilangkan Tulisan index.php

Pertama-tama, mungkin Anda akan sangat ingin menghilangkan tulisan “index.php” dari URL. Untuk itu Anda cukup tambahkan ‘showScriptName’=>false seperti begini:
 'urlManager'=>array(  
            'urlFormat'=>'path',  
          'showScriptName'=>false,  
            'rules'=>array(  
            ....  
            ),  
      ),  
Kemudian tambahkan file .htaccess di folder D:\xampp\htdocs\[aplikasi web] dengan isi seperti berikut:
 RewriteEngine on  
 # if a directory or a file exists, use it directly  
 RewriteCond %{REQUEST_FILENAME} !-f  
 RewriteCond %{REQUEST_FILENAME} !-d  
 # otherwise forward it to index.php  
 RewriteRule . index.php  

Cara Menulis Aturan URL Manager

Misalnya, Anda ingin membuat halaman login dapat diakses dengan URL www.namaweb.com/sign-in. Maka Anda cukup menulis begini
 'urlManager'=>array(  
            'urlFormat'=>'path',  
            'rules'=>array(  
              'sign-in' => 'site/login',  
            ),  
      ),  
Penjelasannya begini. Biasanya untuk mengakses login kita akses dengan www.namaweb.com/index.php?r=site/login. Jadi di bagian kanan, kita tulis bentuk pada biasanya, yakni “site/login”. Lalu karena kita ingin halaman login bisa dibuka dengan www.namaweb.com/sign-in, maka di sebelah kiri cukup masukkan “sign-in”.

Anda bisa memasukkan satu per satu jika Anda mau. Tetapi masalahnya halaman Web kadang bisa sangat banyak. Akan sangat merepotkan jika menulis rule satu per satu.

Jadi terkadang kita perlu sesuatu yang lebih fleksibel. Contohnya, seperti kasus di bawah ini:
www.namaweb.com/index.php?r=site/signup berubah menjadi www.namaweb.com/signup
www.namaweb.com/index.php?r=site/contact berubah menjadi www.namaweb.com/contact dan seterusnya.

Kita bisa menulis sintaks begini:
 'urlManager'=>array(  
            'urlFormat'=>'path',  
            'rules'=>array(  
              '<nama>'=>'site/<nama>',  
            ),  
      ),  
Sesuai peraturan sebelumnya. Di sebelah kanan merupakan bentuk URL biasanya. Karena biasanya kita mengakses dengan menulis www.namaweb.com/index.php?r=site/halaman1 atau index.php?r=site/halaman2 dan seterusnya, maka kita pasang yang berubah-berubah itu dengan tanda kurung siku. Pada contoh atas, penulis menggunakan ““. Pemberian nama terserah asal alfabet.

Kita ingin URL baru menjadi www.namaweb.com/halaman1 atau www.namaweb.com/halaman2 dan seterusnya. Jadi kita cukup tulis “” pada sebelah kiri. Ingat, jika sebelah kanan menggunakan “” maka kiri harus sama. 

Mungkin ada satu pertanyaan yang terbesit di dalam pikiran, bagaimana jika ada perkecualian? Maksudnya begini. Tadi kita sudah membuat aturan supaya semua halaman yang ber-URL www.namaweb.com/index.php?r=site/xyz akan menjadi www.namaweb.com/xyz, tetapi untuk URL www.namaweb.com/index.php?r=site/login justru ingin diubah menjadi www.namaweb.com/sign-in. Bagaimana dong?

Untuk ini kita cukup tulis begini saja:
 'urlManager'=>array(  
            'urlFormat'=>'path',  
            'rules'=>array(  
            'sign-in' => 'site/login',  
              '<nama>'=>'site/<nama>',  
            ),  
      ),  

Dua aturan ini, harus diperhatikan urutannya. Yii membaca aturan dari paling atas ke bawah. Ketika aturan pertama sudah memenuhi syarat, Yii tidak akan membaca URL di bawah lagi. Itu sebabnya mengapa kita harus menaruh ‘sign-in’=> ‘site/login’ di atas.

Selamat mencoba.

0 comments:

Post a Comment