Welcome to Abdul Malik Ikhsan's Blog

Simulasi Master Detail dengan Template Parser (CodeIgniter)

Posted in Tutorial PHP by samsonasik on August 28, 2008

Pada materi codeIgniter sebelumnya, kita sudah membahas tentang pagination, di mana di dalamnya pun sudah tampil contoh aplikasi Master Detail,hanya saja, di layer View, masih campur aduk antara coding PHP dan HTML, nah, sekarang, akan kita coba pisahkan coding PHP dan HTML tersebut, yaitu dengan menggunakan library parser yang dimiliki oleh CodeIgniter.
Salah satu kelemahan dari codeIgniter adalah (saya belum menemukan pengindekan dalam view dengan cara parser – red) dalam hal pengindekan di layer view seperti halnya yang bisa kita lakukan di smarty.
Nah, untuk menanggulanginya adalah dengan cara, kita akali di layer Controller dengan memanfaatkan array, hm…, lagi-lagi array ya …, he..he..
Ok, let’s begin :
Kita ambil contoh :
— ada master ‘entries’, berisi title & body
— ada detail entries, kita beri nama ‘comment’, berisi nama & comment.
The Controller :

<?php
//------------SIMULASI MASTER DETAIL-------------//
// @author 	: Abdul Malik Ikhsan
// @thanks to	: CodeIgniter's Forums, Bos2
// @fileName    : parser.php

class Parser extends Controller{
	function __construct(){
		parent::Controller();
	}
	function index(){
			$this->load->library('parser');
			//entries blog...
			$entries = array(
   						array('title' => 'Hallo...', 'body' => 'Namaku Ikhsan'),
   						array('title' => 'Met Pagi...!', 'body' => 'Bagaimana kabar Anda hari ini ?'),
   						array('title' => 'Hai semua :)!', 'body' => 'Apakah Anda sudah sarapan hari ini?'),
						);			

			//sisipkan index lain ke dalam array, kita beri nama no, comment, numcomment misalnya
			foreach ($entries as $key => $entry)
			{
				$no = $key+1;
   				$entries[$key]['no'] = $no;
   				$entries[$key]['comment'] = array(
   								array('nama'=>'samson'.$no,'comment'=>'comment'.$no),
   								array('nama'=>'ryan'.$no,'comment'=>'komentar'.$no)
   								);
   				foreach($entries[$key]['comment'] as $keys => $val){
							$entries[$key]['comment'][$keys]['numcomment'] = $keys + 1;
   				}
			}										

			$this->parser->parse('template', array('blog_entries' => $entries));
	}
}
//------------------End of Class------------------//

The View :

<!-- @filename : template.php -->
{blog_entries}
     Tulisan ke : {no}
     {title} &nbsp;
     {body}  &nbsp;
     <b>Komentar dari tulisan di atas : </b>
     		 {comment}
     		 		{numcomment}. {nama} &nbsp; {comment}
     		 {/comment}
{/blog_entries}

Untuk database tinggal diimplementasikan lebih lanjut saja 🙂

Advertisements

CodeIgniter (Framework 1) =>Pagination

Posted in Tutorial PHP by samsonasik on August 16, 2008

Melanjutkan pembahasan-pembahasan sebelumnya, framework berguna untuk mempermudah pembuatan aplikasi, misalkan untuk limit, paging, mapping sudah disediakan oleh framework. Saya melihat codeIgniter adalah framework php yang mudah untuk digunakan, tetapi termasuk powerfull, kita tidak perlu lagi susah-susah lagi memikirkan kompleksitas dari logic aplikasi, just mengerti tentang Array, kalau itu sudah paham, insya Allah ga akan susah untuk belajar framework, apalagi sudah terbiasa dengan smarty. Kali ini, saya akan lebih khusushon membahas tentang paging di codeIgniter 🙂
Ok, let’s begin 🙂
Pertama, kita harus tahu struktur directory dulu :
secara default, terdapat dalam folder system yang ada di folder codeIgniter kita, di dalamnya terdapat folder application, libraries, dan lain sebagainya. Aplikasi yang kita bangun kita letakkan di folder application, yang di dalamnya ada configurasi database, controllers, views, models, dan sebagainya. Nah, sekarang, kita mulai dengan konfigurasi dulu (untuk konsep pemetaan page bisa baca user_guide-nya).

Pertama, kita tentukan url base kita,
..codeigniter\system\application\config\config.php

//ubah localhost menjadi $_SERVER["SERVER_NAME"];
//untuk menanggulangi aplikasi ditaruh di sisi server
$config['base_url']    = "http://".$_SERVER["SERVER_NAME"]."/CodeIgniter/";

Nah, baru kita set database-nya
..codeigniter\system\application\config\database.php

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "codeigniter";
$db['default']['dbdriver'] = "mysql";
//... dst

setelah beres, kita setting kelas Pagination-nya : (bisa diubah di controller )

var $base_url                = ''; // The page we are linking to
var $total_rows          = ''; // Total number of items (database results)
var $per_page                 = 10; // Max number of items you want shown per page
var $num_links            =  3; // Number of "digit" links to show before/after the currently viewed page
var $cur_page                 =  0; // The current page being viewed
var $first_link       = 'Awal';
var $next_link            = '';
var $prev_link            = '';
var $last_link            = 'Akhir';

Ok, preparing selesai, sekarang, kita siap untuk membuat aplikasi dengan paging 🙂 :
Kali ini, saya membuat contoh untuk view-ing table untuk blog, saya buat table entries dan table comment, table entries mempunyai field-field id, title, content, dan date, sedangkan table comment yang merupakan table detail, field-fieldnya id, nama,email, id_entries, dan komentar. Isi masing2 table.
Hal pertama yang harus dilakukan adalah, menyiapkan model :
The Model :..codeigniter\system\application\models\Blogmodel.php –>

<?php
class Blogmodel extends Model {

var $title   = '';
var $content = '';
var $date    = '';

function Blogmodel()
{
//Memanggil Constructor Model
parent::Model();
}

//fungsi limitasi
function get_last_entries($num,$offset)
{
$query = $this->db->get('entries', $num,$offset);
return $query->result_array();
}

//fungsi menampilkan detail komentar dari entries
function get_comment($id){
$sql = "select * from comment where id=?";
$query = $this->db->query($sql, array($id));
return $query->result_array();
}

function insert_entry()
{
$this->title   = $_POST['title'];
$this->content = $_POST['content'];
$this->date    = date('Y-m-d');

$this->db->insert('entries', $this);
}

function update_entry()
{
$this->title   = $_POST['title'];
$this->content = $_POST['content'];
$this->date    = date('Y-m-d');

$this->db->update('entries', $this, array('id', $_POST['id']));
}

}
?>

The Controller : ..codeigniter\system\application\controllers\blog.php

<?

class Blog extends Controller {

function __construct() {

parent::Controller();

$this->load->helper(’url’);

$this->load->helper(’html’);

$this->load->database();

}

//menampilkan halaman index

function index()

{

//load class Blogmodel
$this->load->model(’Blogmodel’, ”, TRUE);

//load class Pagination</pre>
$this->load->library(’pagination’);
 $config['base_url'] = base_url().’index.php/blog/index/’;
 $config['total_rows'] = $this->db->count_all(’entries’);
 $config['per_page'] = ‘2′;

//manipulasi image next, prev, last, first (anggap kita tambah folder images
 dan gambar-gambar di dalam  folder  codeigniter kita)
 $image_propertiesnext = array(
 ’src’ => ‘images/active.gif’,
 ‘class’ => ‘post_images’,
 ‘width’ => ‘15′,
 ‘height’ => ‘15′,
 ‘title’ => ‘Halaman Selanjutnya’,
 ‘rel’ => ‘lightbox’,
 );

$image_propertiesprev = array(
 ’src’ => ‘images/active2.gif’,
 ‘class’ => ‘post_images’,
 ‘width’ => ‘15′,
 ‘height’ => ‘15′,
 ‘title’ => ‘Halaman Sebelumnya’,
 ‘rel’ => ‘lightbox’,
 );

$image_propertiesfirst = array(
 ’src’ => ‘images/first.gif’,
 ‘alt’ => ‘Halaman Awal’,
 ‘class’ => ‘post_images’,
 ‘width’ => ‘15′,
 ‘height’ => ‘15′,
 ‘title’ => ‘Halaman Awal’,
 ‘rel’ => ‘lightbox’,
 );

$image_propertieslast = array(
 ’src’ => ‘images/last.gif’,
 ‘alt’ => ‘Halaman Terakhir’,
 ‘class’ => ‘post_images’,
 ‘width’ => ‘15′,
 ‘height’ => ‘15′,
 ‘title’ => ‘Halaman Terakhir’,
 ‘rel’ => ‘lightbox’,
 );

$config['next_link'] = img($image_propertiesnext);
 $config['prev_link'] = img($image_propertiesprev);
 $config['first_link'] = img($image_propertiesfirst);
 $config['last_link'] = img($image_propertieslast);

$this->pagination->initialize($config);

$data['query'] = $this->Blogmodel->get_last_entries($config['per_page'],
 $this->uri->segment(3));

//detail comment
 $comment = array();
 $noperpage = array();
 $no = 0; $nolanjut = 0;
 forEach($data['query'] as $val):
 $comment[] = $this->Blogmodel->get_comment($val['id']);
 if (!$this->uri->segment(3)): //jika page belum berjalan…
 $no++;
 else:				//jika page sudah berjalan…
 $nolanjut++;
 if ($nolanjut>1):
 //jika looping sudah berjalan lebih dari satu kali
   $no =  $nolanjut + $config['per_page'] * ($this->uri->segment(3)/$config['per_page']);

 else:
 //jika looping baru berjalan sekali
 $no = $this->uri->segment(3)+1;
 endif;
 endif;
 $noperpage[] = $no;
 endforeach;

$data['comment'] = $comment;
 $data['noperpage'] = $noperpage;

$data['paging'] = $this->pagination->create_links();
 $this->load->view(’blogview’, $data);

}
 }
 ?>

Saatnya menampilkan :
The view :

Code: <!– ..codeigniter\system\application\views\blogview.php –>
<?=$paging?>
<table border=1>
<tr>
<td>No.</td>
<td>Tittle</td>
<td>Content</td>
<td>Date</td>
<td>comment</td>
</tr>
<?php
foreach($query as $val=>$value):
?>
<tr>
<td><?=$noperpage[$val]?></td>
<td><?=$value[‘title’]?></td>
<td><?=$value[‘content’]?></td>
<td><?=$value[‘date’]?></td>
<td>
<?php
foreach($comment[$val] as $com):
echo nl2br($com[‘komentar’]); echo “<br>”;
endforeach;
?>
</td>
</tr>
<?php endforeach; ?>
</table>
<?=$paging?>

Mengapa Ayam Menyebrang Jalan?

Posted in lucu2 by samsonasik on August 11, 2008

source : dari milist tetangga 🙂
Jawaban menurut:

Guru TK:
Supaya sampai ke ujung jalan.

FBI:

Beri saya lima menit dengan ayam itu, saya akan tahu kenapa.

Aristoteles:

Karena merupakan sifat alami dari ayam.

Martin Luther King, Jr.:

Saya memimpikan suatu dunia yang membebaskan semua ayam menyeberang jalan tanpa mempertanyakan kenapa.
Freud:

Fakta bahwa kalian semua begitu peduli pada alasan ayam itu menunjukkan ketidaknyamanan seksual kalian yang tersembunyi.

George W Bush:

Kami tidak peduli kenapa ayam itu menyeberang! Kami cuma ingin tau apakah ayam itu ada di pihak kami atau tidak, apa dia bersama kami atau melawan kami. Tidak ada pihak tengah di sini!

Darwin:

Ayam telah melalui periode waktu yang luar biasa, telah melalui seleksi alam dengan cara tertentu dan secara alami tereliminasi dengan menyeberang jalan.

Einstein:

Apakah ayam itu menyeberang jalan atau jalan yang bergerak di bawah ayam itu, itu semua tergantung pada sudut pandang kita sendiri.

Nelson Mandela:

Tidak akan pernah lagi ayam ditanyai kenapa menyeberang jalan! Dia adalah panutan yang akan saya bela sampai mati!

Thabo Mbeki:

Kita harus mencari tahu apakah memang benar ada kolerasi antara ayam dan jalan.
Isaac Newton:

Semua ayam di bumi ini kan menyeberang jalan secara tegak lurus dalam garis lurus yang tidak terbatas dalam kecepatan yang seragam, terkecuali jika ayam berhenti karena ada reaksi yang tidak seimbang dari arah berlawanan.

Programmer Oracle:
Tidak semua ayam dapat menyeberang jalan, maka dari itu perlu adanya interface untuk ayam yaitu nyeberangable, ayam-ayam yang ingin atau bisa menyeberang diharuskan untuk mengimplementasikan interface nyebrangable, jadi di sini sudah jelas terlihat bahwa antara ayam dengan jalan sudah loosely coupled.

Sutiyoso:

Itu ayam pasti ingin naik busway.

Soeharto:

Ayam-ayam mana yang ndak nyebrang, tak gebuk semua! Kalo perlu ya dikebumikan saja.

Habibie:

Ayam nyeberang dikarenakan ada daya tarik gravitasi, dimana terjadi percepatan yang mengakibatkan sang ayam mengikuti rotasi dan berpindah ke seberang jalan.
Nia Dinata:

Pasti mau casting ’30 Hari Mencari Ayam’ ya?

Desi Ratnasari:

No comment!

Dhani Ahmad:

Asal ayam itu mau poligami, saya rasa gak ada masalah mau nyebrang kemana juga…

Chinta Laura:

Ayam nyebrang jhalaan..? karena gak ada owject…biecheeck. …

Roy Marten:

Ayam itu khan hanya binatang biasa, pasti bisa khilaf.. (sambil sesenggukan) .

Butet Kartaredjasa:

Lha ya jelas untuk menghindari grebekan kamtib to?

Megawati:

Ayamnya pasti ayam wong cilik. Dia jalan kaki toh?

Harmoko:

Berdasarkan petunjuk presiden.

and the best answer is:

Gus Dur :

“Kenapa ayam nyebrang jalan? Ngapain dipikirin? Gitu aja kok repot! Bukannya kerja tapi malah baca ginian…”