Kali ini kita akan membahas bagaimana frontend pada GetSimple CMS bekerja. Saat kita membuka website hasil instalasi yang telah dilakukan sebelumnya, maka secara default kita akan mengakses file index.php di direktori root terlebih dahulu. Ini adalah file index.php tersebut :

<!--?php /**  * Index  *  * Where it all starts  *  * @package GetSimple  * @subpackage FrontEnd  */ /**  *  GSCONFIG definitions  */ if(!defined('GSSTYLEWIDE')) define('GSSTYLEWIDE','wide'); // wide style sheet # Setup inclusions $load['plugin'] = true; if (file_exists('gsconfig.php')) { 	require_once('gsconfig.php'); } # Relative if (defined('GSADMIN')) { 	$GSADMIN = GSADMIN; } else { 	$GSADMIN = 'admin'; } $admin_relative = $GSADMIN.'/inc/'; $lang_relative = $GSADMIN.'/'; $base = true; # Include common.php include($GSADMIN.'/inc/common.php'); # Hook to load page Cache exec_action('index-header'); # get page id (url slug) that is being passed via .htaccess mod_rewrite if (isset($_GET['id'])){ 	$id = str_replace ('..','',$_GET['id']); 	$id = str_replace ('/','',$id); 	$id = lowercase($id); } else { 	$id = "index"; } # define page, spit out 404 if it doesn't exist $file_404 = GSDATAOTHERPATH . '404.xml'; $user_created_404 = GSDATAPAGESPATH . '404.xml'; if (isset($pagesArray[$id])) { 	$data_index = getXml(GSDATAPAGESPATH . $id . '.xml'); } else { 	if (isset($pagesArray['404'])) { 		// use user created 404 page 		$data_index = getXml($user_created_404); 	} elseif (file_exists($file_404))	{ 		// default 404 		$data_index = getXml($file_404); 	} else { 		// fail over 		redirect('404'); 	} 	exec_action('error-404'); } $title         = $data_index--->title;
$date          = $data_index->pubDate;
$metak         = $data_index->meta;
$metad         = $data_index->metad;
$url           = $data_index->url;
$content       = $data_index->content;
$parent        = $data_index->parent;
$template_file = $data_index->template;
$private       = $data_index->private;

# if page is private, check user
if ($private == 'Y') {
	if (isset($USR) && $USR == get_cookie('GS_ADMIN_USERNAME')) {
		//ok, allow the person to see it then
	} else {
		redirect('404');
	}
}

# if page does not exist, throw 404 error
if ($url == '404') {
	header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
}

# check for correctly formed url
if (defined('GSCANONICAL')) {
	if ($_SERVER['REQUEST_URI'] != find_url($url, $parent, 'relative')) {
		redirect(find_url($url, $parent));
	}
}

# include the functions.php page if it exists within the theme
if ( file_exists(GSTHEMESPATH .$TEMPLATE."/functions.php") ) {
	include(GSTHEMESPATH .$TEMPLATE."/functions.php");
}

# call pretemplate Hook
exec_action('index-pretemplate');

# include the template and template file set within theme.php and each page
if ( (!file_exists(GSTHEMESPATH .$TEMPLATE."/".$template_file)) || ($template_file == '') ) { $template_file = "template.php"; }
include(GSTHEMESPATH .$TEMPLATE."/".$template_file);

# call posttemplate Hook
exec_action('index-posttemplate');

?>

Penjelasan urutan eksekusi skrip diatas, kurang lebih seperti berikut ini :

1. Jadi hal pertama yang dilakukan adalah menentukan current style constants jika belum di definisikan sebelumnya.

/**
 *  GSCONFIG definitions
 */

if(!defined('GSSTYLEWIDE')) define('GSSTYLEWIDE','wide'); // wide style sheet

2. Mengecek apakah file gsconfig.php ada di dalam direktori root, jika tidak ada maka nantinya akan dieksekusi script untuk instalasi. Karena seperti kita ketahui, pada akhir instalasi script maka kita disuruh mengubah nama file temp.gsconfig.php menjadi gsconfig.php yang berisi konfigurasi cms.

# Setup inclusions
$load['plugin'] = true;
if (file_exists('gsconfig.php')) {
    require_once('gsconfig.php');
}

3. Kemudian pada bagian selanjutnya yaitu di bagian ini :

# Relative
if (defined('GSADMIN')) {
    $GSADMIN = GSADMIN;
} else {
    $GSADMIN = 'admin';
}

digunakan apakah konstanta GSADMIN yang berisi nama direktori script admin telah didefinisikan sebelumnya (di file gsconfig.php). Jika kamu ingin mengganti url yang digunakan untuk mengakses halaman administrator yang secara default diakses dengan /admin ke url lain misalnya administrator maka kamu bisa mengubahnya dengan mengganti definisi konstanta GSADMIN di file gsconfig.php tersebut, dan jangan lupa rename direktori admin menjadi administrator. Jika terjadi error atau blank screen cobalah untuk merestart web servernya.

4. Selanjutnya adalah bagian Include common.php. File ini menginisialisasi sebagian besar variabel untuk situs web. Juga tempat dimana kebanyakan file lain yang dibutuhkan akan dipanggil. Ia juga membaca dan menyimpan beberapa variabel.

# Include common.php
include($GSADMIN.'/inc/common.php');

5. Kemudian mencoba untuk meload cache halaman frontend.

# Hook to load page Cache
exec_action('index-header');

parameter “index-header” akan membuat fungsi getPagesXmlValues dieksekusi untuk mengambil file xml dari halaman yang akan ditampilkan. Fungsi tersebut ada di file /admin/inc/caching_fungtion.php

6. Selanjutnya adalah mencoba mendapatkan id halaman yang ingin diakses. Bisa diketahui dari url yang ketikkan di browser. Jika tidak ada, maka isi id pages dengan nilai “index” agar ditampilkan halaman index.

# get page id (url slug) that is being passed via .htaccess mod_rewrite
if (isset($_GET['id'])){
    $id = str_replace ('..','',$_GET['id']);
    $id = str_replace ('/','',$id);
    $id = lowercase($id);
} else {
    $id = "index";
}

7. Selanjutnya adalah menentukan halaman error 404. halaman ini ditampilkan jika ternyata halaman yang diinginkan tidak ditemukan oleh web server.

# define page, spit out 404 if it doesn't exist
$file_404 = GSDATAOTHERPATH . '404.xml';
$user_created_404 = GSDATAPAGESPATH . '404.xml';

8. Baris kode berikutnya akan memparsing data xml yang dibaca menggunakan fungsi getXml.

if (isset($pagesArray[$id])) {
    $data_index = getXml(GSDATAPAGESPATH . $id . '.xml');
} else {
    if (isset($pagesArray['404'])) {
        // use user created 404 page
        $data_index = getXml($user_created_404);
    } elseif (file_exists($file_404))   {
        // default 404
        $data_index = getXml($file_404);
    } else {
        // fail over
        redirect('404');
    }
    exec_action('error-404');
}

$title         = $data_index->title;
$date          = $data_index->pubDate;
$metak         = $data_index->meta;
$metad         = $data_index->metad;
$url           = $data_index->url;
$content       = $data_index->content;
$parent        = $data_index->parent;
$template_file = $data_index->template;
$private       = $data_index->private;

9. Lalu akan dilakukan pengecekan apakah halaman yang akan ditampilkan merupakan halaman private atau bukan. Jika merupakan halaman private maka akan dilakukan pengecekan hak akses user login pengakses tersebut.

# if page is private, check user
if ($private == 'Y') {
    if (isset($USR) && $USR == get_cookie('GS_ADMIN_USERNAME')) {
        //ok, allow the person to see it then
    } else {
        redirect('404');
    }
}

10. Lalu dilakukan pengecekan jika halaman yang diinginkan tidak ditemukan, maka akan ditampilkan halaman error 404.

# if page does not exist, throw 404 error
if ($url == '404') {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
}

11. Blok selanjutnya digunakan untuk mengecek apakah uri halaman yang asli disembunyikan. Jika iya maka temukan uri sebenarnya dan arahkan kehalaman itu.

# check for correctly formed url
if (defined('GSCANONICAL')) {
    if ($_SERVER['REQUEST_URI'] != find_url($url, $parent, 'relative')) {
        redirect(find_url($url, $parent));
    }
}

12. dan bagian terakhir adalah pemanggilan template dan mengisinya dengan variabel yang ada, dan kemudian menamplikannya sesuai theme yang sedang aktif.

# include the functions.php page if it exists within the theme
if ( file_exists(GSTHEMESPATH .$TEMPLATE."/functions.php") ) {
    include(GSTHEMESPATH .$TEMPLATE."/functions.php");
}

# call pretemplate Hook
exec_action('index-pretemplate');

# include the template and template file set within theme.php and each page
if ( (!file_exists(GSTHEMESPATH .$TEMPLATE."/".$template_file)) || ($template_file == '') ) { $template_file = "template.php"; }
include(GSTHEMESPATH .$TEMPLATE."/".$template_file);

# call posttemplate Hook
exec_action('index-posttemplate');

Ternyata CMS yang terbilang cukup simple penggunaanya pun, dalam pembuatannya masih terlalu rumit untuk dibaca alur eksekusinya. Lain kali kita akan membahasnya lebih lanjut.

Berikut ini adalah gambar alur pemanggilan file pada saat halaman index frontend GetSimple CMS di panggil.

alur pemanggilan file pada frontend getsimple CMS

Gambar diatas saya buat untuk keperluan catatan saya pribadi, jadi mohon maaf jika tidak mengikuti standard diagram apapun. πŸ™‚ Kesimpulan sementara saya saat ini :

  1. Aplikasi GetSimple CMS tidak menggunakan coding standard yang memadai.
  2. Penamaan variabel, konstan, maupun fungsi masih membingungkan jika tidak dilakukan pembacaan lewat debugging.
  3. Seharusnya masih bisa dibuat penyederhanaan script agar lebih mudah terbaca untuk fungsionalitas CMS yang sama. Tapi bagaimana mengerjakannya??? saya sendiri masih coba mempelajarinya… πŸ˜€ πŸ˜€ πŸ˜€ Barangkali ada yang sudah punya idenya, monggo di komentari.
Advertisements

About phpgeek programmer

pemimpi yang berharap menjadi the best programmer di zamannya

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s