Memisahkan logika dan layout pada php

24 August 2019

Memisahkan logika dan layout bertujuan untuk memudahkan kita dalam membuat dan mengembangkan aplikasi. Salah satu manfaatnya adalah script yang kita buat akan lebih rapi dan bersih serta mudah dibaca karena script PHP kita tidak campur aduk dengan HTML

Sudah banyak template engine yang bagus diluar sana untuk memisahkan logika dan layout yang bisa kita gunakan secara gratis contohnya Twig, Mustache, Blade, Smarty, Dwoo dan lain-lain.

Tapi bagaimana kalo kita ingin memisahkan logika dan layout tanpa template engine seperti yang sudah disebutkan diatas? Jika sobat ingin mencoba membuat sendiri, sobat bisa ikuti dan baca artikel ini sampai selesai.

memisahkan-logika-dan-layout-pada-php.png

Membuat template engine sederhana

Disini kita akan membuat class dengan nama Template dan kita simpan pada file Template.php. Silahkan sobat buat file dengan nama Template.php dan isi seperti dibawah ini :


<?php 

class Template{
	
	public $data   = array();
	
	public function set($key, $value){
		$this->data[$key] = $value;
	}
	
	public function render($filename){
		
		if(count($this->data) > 0){	
			foreach ($this->data as $key => $value){
                if (strlen($key) > 0) {
					${$key} = $value;
                }
            }
        }

        if ( file_exists('templates/index.php')){
            require_once 'templates/index.php';
        }
	}
}

Pada class diatas terdapat function set dengan parameter key dan value, kemudian ada function render dengan parameter filename. Cara kerjanya adalah, simpan data kedalam variable $data yang bertipe array menggunakan function set kemudian data dalam array tersebut ubah menjadi variable sendiri-sendiri menggunakan function render, key menjadi nama variable nya kemudian value menjadi isi dari variable tersebut.

Setelah itu panggil file yang berisi layout, maka didalam file layout tersebut kita sudah bisa memanggil variable ( nama variable tersebut sama dengan key yang kita masukkan sebagai parameter ) yang kita masukkan melalui function set tadi. Sebagai contoh , pada class diatas akan memanggil file index.php yang berada dalam folder templates sebagai file layout utama dan variable $filename menjadi nama file layout detailnya.

Contoh penggunaan

Contoh penggunaanya misal file utama atau script logika kita adalah index.php pada root folder website. Kemudian file layout utamanya adalah file index.php yang ada dalam folder templates tadi dan dari file layout itu kita akan panggil file layout lainnya yang bernama home.php. Untuk lebih jelasnya sobat bisa lihat struktur file dan foldernya sebagai berikut :


Template.php
index.php
    [templates]
        index.php
        home.php

Dalam index.php sobat yang diluar folder templates isikan seperti berikut :


<?php 

require_once 'Template.php';

$template = new Template();

$title_page 	= 	'Home';

$content_page  	= 	array(
						 array(
							'title'=>'Title 1',
							'content'=>'Content 1'
						 ),
						 array(
							'title'=>'Title 1',
							'content'=>'Content 2'
						 )
					);

$template->set('title', $title_page);
$template->set('content', $content_page);

$template->render('home');

Kemudian pada folder templates, isi dari file index.php dan home.php adalah seperti berikut :

index.php


<!DOCTYPE html>
<html lang="en">
<head>
	
	<meta charset="utf-8">
	<title>Template</title>
	<meta name="description" content="">
	<meta name="author" content="">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<style>
	
	body{
		color:#333;
	}
	
	.container{
		width:600px;
		margin:0 auto;
	}
	
	hr {
		margin-top: 20px;
		margin-bottom: 20px;
		border-width: 0;
		border-top: 1px dotted #E1E1E1;
	}
	
	</style>
</head>
<body>
<div class="container">

	<?php 
	
	if ( file_exists('templates/'.$filename.'.php')){ 
		require_once 'templates/'.$filename.'.php'; 
	} 
	
	?>
</div>
</body>
</html>

home.php


<h1><?php echo $title; ?></h1>

<?php foreach($content as $c){ ?>
	<h2><?php echo $c['title']; ?></h2>
	<p><?php echo $c['content']; ?></p>
	<hr />
<?php } ?>

Demikian, semoga tulisan ini dapat bermanfaat.


Komentar

Adhit

Gan, terimakasih pencerahannya mengenai pemisahan Logika dan Layout PHP. Semoga menjadi ilmu yang bermanfaat dan menjadi ladang amal buat creator web ini. Amin..

3 September 2019

Ajat Sudrajat

@Adhit, Amiin. Terima kasih sudah berkunjung

3 September 2019