Tuesday, October 23, 2012

Permalink Layaknya Wordpress Dengan cara yang paling bodoh


Nah kali ini gw pengen nulis soal gimana sih di php tentunya.... sebenarnya teorinya adalah guampang poll. Gw nggak akan bahas mod_rewrite yang jelas jelas udah banyak di bahas di internet.

Saran gw elu musti apa yang gw katain yaitu
  1. Mod_rewrite dengan apache ( hampir semua hostingan yang mendukung wordpress udah pasti support, lha wong wordpress yang super ribet itu aja bisa di handle. Masak kode kita yang menjiplak  teorinya wordpress nggak bisa di install khan lucu )
  2.  Sedikit pengetahuan tentang HTACCESS dan PHP

Okeh lanjut... Elu musti nginstall xampp, notepad++, ke Senjata Tajam sajalah. kecuali elu custom install php dan mysql sendiri.. but bagi gw sendiri gw nggak ingin menambah beban komputer gw dengan service autorun  dsbnya...walaupun toh sebenarnya bisa di disable juga. tapi I hate it.. jawabannya itu ajalah untuk sementara.. ( OS windows aja  ya, maklum lagi malas buka linux )

 liat dulu neeh wordpess htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]
</IfModule>

# END WordPress
Tuh khan simple banget...  btw itu urlnya http://localhost/wordpress/ begitu yak... jadi di subdirectory..

Nggak perlu di bahas kode di atas khan?
 lha wong intinya cuma apapun yang di request(query ya lebih enak nyebutnya ) oleh http setelah directory /wordpress/ akan di handle oleh dalemannya wordpress dan gw jamin dalemannya si wordpress ini lebih rumit daripada dalemannya cewek  but its oke karena akan gw simple khan... ( maklum gw nggak pengen ribet :P )

Pilihan pertama adalah elu membedah seluruh dalemannya si wordpress, bhnya, celdam, dsbnya , abis itu elu teliti lebih jauh dan jauh, satu persatu dah... inci demi inci... ( mabok mabok dah lu )...

Pilihan kedua...
Cukup elu PRINT $_SERVER[], ntar khan ketahuan tuh :D isinya.. jaminan lebih asik daripada buka daleman yang lain.

contoh gw ciptain folder di folder htdocs di xampp namanya permaling, di dalamnya gw ciptain 1 file
  1. index.php
  2. .htaccess
isinya cuma gini doank .htaccess
RewriteEngine On
RewriteBase /permaling/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /permaling/index.php [QSA,L]
index.php
<?php

print_r ($_SERVER);
nah kita coba deh kasih gini, localhost/permaling/woi-cobain-permalinkdonk
nampak tulisan kacau khan... biar lebih enak bacanya buka source codenya dengan ctrl+u di mozilla atau elu klik kanan di pagenya lalu cari deh kata kata source code.

hasilnya adalah ini

Array ( [REDIRECT_UNIQUE_ID] => UIXW6MCoAggAACI4Z8QAAAD5 [REDIRECT_STATUS] => 200 [UNIQUE_ID] => UIXW6MCoAggAACI4Z8QAAAD5 [HTTP_HOST] => localhost [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20120424 Firefox/12.0 PaleMoon/12.0 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5 [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTP_CONNECTION] => keep-alive [PATH] => C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\EmEditor;C:\xampp-php5.2\phantomjs [SystemRoot] => C:\WINDOWS [COMSPEC] => C:\WINDOWS\system32\cmd.exe [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH [WINDIR] => C:\WINDOWS [SERVER_SIGNATURE] => <address>Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 Server at localhost Port 80</address> [SERVER_SOFTWARE] => Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 [SERVER_NAME] => localhost [SERVER_ADDR] => 127.0.0.1 [SERVER_PORT] => 80 [REMOTE_ADDR] => 127.0.0.1 [DOCUMENT_ROOT] => C:/xampp-php5.2/htdocs [SERVER_ADMIN] => admin@localhost [SCRIPT_FILENAME] => C:/xampp-php5.2/htdocs/permaling/index.php [REMOTE_PORT] => 4318 [REDIRECT_URL] => /permaling/woi-cobain-permalinkdonk [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /permaling/woi-cobain-permalinkdonk [SCRIPT_NAME] => /permaling/index.php [PHP_SELF] => /permaling/index.php [REQUEST_TIME] => 1350948584 [argv] => Array ( ) [argc] => 0 )




yang perlu kita lihat cuma ini ajalah...
[QUERY_STRING] => 
[REQUEST_URI] => /permaling/woi-cobain-permalinkdonk
sebenarnya ntar kalau lebih lanjut kita akan mainan query string, tapi untuk sementara nggak usahlah. Gw akan mainan
[REQUEST_URI] => /permaling/woi-cobain-permalinkdonk

jadi teorinya adalah, kita cut folder pemaling abis itu gantiin abis itu bisa kita cari di dalam database kita apakah ada slug yang  woi-cobain-permalinkdonk .
jadi kita akan mengatur slugnya di database...di simpan tepatnya...

Ohya tadi blum gw kasih teorinya ya kelupaan hehehehe...
begini:

htaccess -> [baca:dilempar] ke index.php, di index.php ntar tangkep slugnya lalu check apakah di database ada ID atau slug yang di cari. liat bagan:

.htaccess-> index.php -> catchslug -> checkslugdidatabase -> jika ada tampilkan isi 
 Piece of cake, huh?

Kalau gw sih lebih enak slug itu gw bikin dengan dengan format seperti ini, /permaling/UNIQUEID/baru-permalink  ( kenapa musti ID, jadi ntar slugnya bisa di mainkan dengan enak.. heheheheh :D )

Ini adalah source code gw untuk project filestube, core dari inti yang memegang peranan penting dalam permalink

Messy code, but works... :D

//print $fulldomain;

//print_r ($_SERVER);

$gettingpath = explode ($localpath, $_SERVER['REQUEST_URI']);

//-- pecah berdasarkan /

//print_r ($gettingpath);

//$gettingid = explode ('/',$gettingpath[1]);

//-- cobain dengan preg_replace untuk menganti semua karakter kecuali angka

//$testpreg = preg_replace("/[^0-9-]/", '' ,$gettingpath );

//print_r ($testpreg);

//-- Pecah dengan karakter dashed (-)

//echo $gettingid[0];

//print_r($_SERVER);

//-- Mungkin di coba apakah explode lebih ringah daripada preg_replace

$gettingid = explode ('/',$gettingpath[1]);

//ob_start("ob_gzhandler"); //harus di hapusya

//print_r ($gettingid);

if (isset($SfSE) && $SfSE == true) {

//Ini bagian search engine

}elseif( isset($_GET['s']) && $_GET['s'] != NULL) {

//sanitaze dengan built-in php filter   

$s = filter_var($_GET['s'], FILTER_SANITIZE_STRING);

//fuck with everything they have called html

$s = strip_tags($s);

//Be more freaks, sanitaze that

$s = cleanInput($s);

$sa = Slug($s);

//print ''.$fulldomain.'search/'.$s.'';

//ob_start();

header("Location: ".$fulldomain."s/".$sa."");

//ob_end_flush();

}elseif($gettingid[0] == "s") {

$s = str_replace(array('_','-','%20'), '+',$gettingid[1]);

include ('themes/search.php');

}elseif ($gettingid[0] == "id") {

//if ID

include ('themes/singledownload.php');

}elseif(preg_match('([^/]+$)',$_SERVER['REQUEST_URI'], $bc)){

$s = str_replace(array('_','-','%20'), ' ',$bc[0]);

$s = filter_var($s, FILTER_SANITIZE_STRING);

$sa = Slug($s);

header("Location: ".$fulldomain."s/".$sa."");

}elseif(($_SERVER['REQUEST_URI'] == $localpath) OR ($gettingid[0] == "index.php") )

{

include ('themes/index.php');

}

Okeh tutornya selesai dulu sampai disini, ntar di lanjut dengan bagian database dan sebagainya, mungkin creating custom themes di cms..







Warm regards
radiaku