<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>thinkrooms &#187; php</title>
	<atom:link href="http://www.thinkrooms.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thinkrooms.com</link>
	<description>Web Developer, Web Designer, Internet Solution, Network  and System Integration</description>
	<lastBuildDate>Sun, 08 Nov 2009 04:43:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Yii Framework, new best performance php framework</title>
		<link>http://www.thinkrooms.com/2008/10/08/yii-framework-new-best-performance-php-framework/</link>
		<comments>http://www.thinkrooms.com/2008/10/08/yii-framework-new-best-performance-php-framework/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 01:45:16 +0000</pubDate>
		<dc:creator>tyohan</dc:creator>
				<category><![CDATA[Prado Framework]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Web Developer]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[yii]]></category>

		<guid isPermaLink="false">http://www.thinkrooms.com/?p=83</guid>
		<description><![CDATA[Pengembang Prado Qiang Zue memilih mengembangkan framework baru dibandingkan meneruskan Prado 3 ke versi 4. Framework baru ini yang diberi nama Yii merupakan turunan dari Prado karena meminjam konsep dan kelebihan dari Prado namun dengan beberapa perubahan untuk kemampuan yang lebih baik. Perubahan paling signifikan dari framework ini adalah performancenya. Hasil tes membuktikan bahwa Yii [...]]]></description>
			<content:encoded><![CDATA[<p>Pengembang Prado Qiang Zue memilih mengembangkan framework baru dibandingkan meneruskan Prado 3 ke versi 4. Framework baru ini yang diberi nama Yii merupakan turunan dari Prado karena meminjam konsep dan kelebihan dari Prado namun dengan beberapa perubahan untuk kemampuan yang lebih baik. Perubahan paling signifikan dari framework ini adalah performancenya. Hasil tes membuktikan bahwa Yii telah menjadi framework dengan performance terbaik saat ini. Meninggalkan Codeigniter yang selama ini merupakan pemegang sabuk juara performance untuk framework PHP.</p>
<p><img style="max-width: 800px; float: none;" src="http://www.yiiframework.com/images/performance.png" alt="" /></p>
<p>Codeigniter memilih tidak menggunakan seluruh kemampuan Object Oriented Programming(OOP) dengan alasan performance, namun Yii mematahkan anggapan bahwa OOP pasti akan mengorbankan performance. Memang bila dibandingkan dengan structural programming besar kemungkinan OOP tertinggal, namun dengan kemudahan pengembangan aplikasi menjadi nilai lebih bagi pengembangan dengan OOP. Yii yang namanya terisipirasi dari Wii yaitu game console revolusioner merupakan framework murni OOP dan hanya berjalan di PHP 5.1 keatas.<br />
Berikut merupakan beberapa fitur dari Yii:</p>
<ol>
<li>Menggunakan pola MVC, pola standar pengembangan aplikasi yang memisahkan tampilan, logic program, dan model.</li>
<li>Menggunakan database abstraction layer seperti Data Access Objects(DAO) dan Active Record untuk memudahkan interaksi dengan database.</li>
<li>Terintegrasi dengan JQuery Javascript Framework. Walaupun menggunakan JQuery sebagai internal javascript library, namun Yii dapat menggunakan library lainnya tanpa terjadi bentrok.</li>
<li>Mendukung Internationalization (I18N) and localization (L10N) untuk memudahkan pengembangan aplikasi dalam multi bahasa dan lokalisasi seperti penggunaan waktu dan tanggal.</li>
<li>Memiliki layer cache untuk cache data, halaman, sebagian, dan keseluruhan aplikasi sehingga dapat meningkatkan performance dengan beragam pilihan media cache. Penggunaan media cache seperti database, APC, memcache, dan sebagainya dengan mudah diatur tanpa melakukan perubahan besar pada kode.</li>
<li>Fitur penanganan error dan logging, sehingga memudahkan pengembang dalam melakukan debugging aplikasi dalam masa pengembangan aplikasi.</li>
<li>Penggunaan theme, memudahkan pengembang aplikasi dalam merancang tampilan aplikasi.</li>
<li>Console, penggunaan perintah pada console untuk melakukan beragam perintah otomatis seperti meng-generate struktur dasar aplikasi, model, crud, dan sebagainya.</li>
<li>Dukungan authentication dan authorization internal<strong> </strong>sehingga memudahkan pengembangan aplikasi dengan fitur autentikasi.</li>
<li>Widget, seperti pada Prado memiliki komponen pada Yii memiliki widget yaitu semacam kontrol yang memiliki fungsi tertentu seperti autocomplete, datapicker, table, dan lain-lain. Menggunakan JQuery sebagai javascript client sidenya.</li>
<li>Dukungan form input dan validasi. Memudahkan pengembang untuk bekerja dengan form pada aplikasi dan melakukan validasi input dari form.</li>
<li>Modular dan mudah ditambahkan dengan dukungan extensi dan komponen tambahan sehingga beragam fitur tambahan dengan mudah dimasukkan.</li>
</ol>
<p>Saat ini Yii masih dalam versi 1 alpha. Namun menurut pengembang framework ini sudah cukup stabil untuk digunakan dalam produksi. Namun karena framework ini masih baru sehingga penggunanya juga masih sangat sedikit. Namun melihat fitur, kemampuan dan merupakan turunan dari Prado saya tidak ragu untuk memulai menggunakan framework ini.</p>
<p>Reference</p>
<ul>
<li><a title="Prado Forum" href="http://www.pradosoft.com/forum/index.php/topic,11022.0.html" target="_blank">http://www.pradosoft.com/forum/index.php/topic,11022.0.html</a></li>
<li><a title="yii framework" href="http://www.yiiframework.com" target="_blank">http://www.yiiframework.com</a></li>
</ul>
<img src="http://www.thinkrooms.com/?ak_action=api_record_view&id=83&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.thinkrooms.com/2008/10/08/yii-framework-new-best-performance-php-framework/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Fulltext Indexing untuk mengoptimalkan pencarian data</title>
		<link>http://www.thinkrooms.com/2008/08/30/fulltext-indexing-untuk-mengoptimalkan-pencarian-data/</link>
		<comments>http://www.thinkrooms.com/2008/08/30/fulltext-indexing-untuk-mengoptimalkan-pencarian-data/#comments</comments>
		<pubDate>Sat, 30 Aug 2008 06:33:20 +0000</pubDate>
		<dc:creator>tyohan</dc:creator>
				<category><![CDATA[Recommended]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://www.thinkrooms.com/?p=79</guid>
		<description><![CDATA[Pasti kita sudah mengenal search engine yaitu mesin pencari apapun yang kita ketikan. Hasilnya begitu cepat dalam beberapa detik saja sudah tersaji di halaman hasil search engine. Namun mungkin kita belum tahu bagaimana sih mesin pencari dapat mencari begitu cepat dalam tumpukan data yang begitu besar. Full text indexing adalah salah satu teknik untuk mengoptimalkan [...]]]></description>
			<content:encoded><![CDATA[<p>Pasti kita sudah mengenal search engine yaitu mesin pencari apapun yang kita ketikan. Hasilnya begitu cepat dalam beberapa detik saja sudah tersaji di halaman hasil search engine. Namun mungkin kita belum tahu bagaimana sih mesin pencari dapat mencari begitu cepat dalam tumpukan data yang begitu besar. Full text indexing adalah salah satu teknik untuk mengoptimalkan pencarian data. </p>
<p>Full text indexing merupakan feature database yang salah satunya adalah MySQL, database yang banyak digunakan oleh web developer untuk mengembangkan aplikasi webnya. Full text indexing adalah teknik pencatatan atau penyimpanan data di dalam tabel database dimana data disimpan dalam bentuk terstruktur biasanya B-TREE atau struktur data lainnya dimana format penyimpanan ini memudahkan database dalam melakukan penelusuran data. </p>
<p>Contoh paling sederhana adalah dalam pencarian isi blog. Isi blog biasanya disimpan dan di index didalam database sehingga pencarian dapat dilakukan bila kita mencari isi post tertentu. Full text indexing akan melakukan index pada tiap kata yang ada didalam suatu post yang kurang lebih seperti ini: </p>
<ul>
<li>kata “adobe” ada pada post dengan id 10,12,20 </li>
<li>kata “photoshop” ada pada post dengan id 10, 13, 16 </li>
<li>kata “firework” ada pada postdengan id 2, 10, 20 </li>
<li>dan seterusnya </li>
</ul>
<p>Dengan demikin bila kita memasukkan keyword adobe dalam pencarian maka kita dirujuk ke post dengan id 10, 12, dan 20. Namun tentu tekniknya tidak sederhana itu masih ada beberapa teknik lainnya yang bekerja dalam pencarian data. Contoh diatas hanyalah contoh sederhana dalam pencarian dengan bantuan full text indexing.</p>
<p>Full text indexing yang biasanya berguna mengoptimalkan pencarian pada database. Untuk jumlah data dengan skala menengah database dapan melakukan pencarian dengan cepat. Namun masalah akan timbul pada saat data terus bertambah dan jumlahnya mencapai jutaan baris. Masalah yang timbul antara lain</p>
<ul>
<li>lambat dalam melakukan insert atau penyimpanan data. Hal ini dikarenakan setiap data baru yang masuk maka database harus melakukan pengaturan index agar indexing berfungsi dengan baik </li>
<li>memerlukan kapasitas penyimpanan yang besar, data dan index disimpan terpisa dalam database sehingga makin besar data maka index juga akan bertambah besar. </li>
<li>konsumsi resource berlebihan, dalam penelusuran index akan diload kedalam memory dan menelusuri untuk mencari data yang diinginkan. Makin besar index makin besar pula memory yang dibutuhkan. </li>
</ul>
<p>Bila demikian bagaimana beberapa website indexer seperti mininova.org yang meng-index torrent tracker yang jumlahnya jutaan data bisa menyajikan hasil pencarian dalam beberapa detik? Rahasianya adalah mereka melakukan external indexing, yaitu melakukan indexing data diluar database. Sehingga pencarian dan penelusuran data dilakukan di luar database sehingga tidak mengurangi performance database. External indexing dibantu dengan aplikasi yang khusus untuk melakukan indexing. Dua diatara aplikasi tersebut yang menjadi favorit adalah:</p>
<ul>
<li>Lucene, aplikasi indexing yang&#160; paling terkenal. Dikembangkan dalam platform Java. Performance dan fungsinya sangat baik, namun masalahnya untuk berkolaborasi dengan PHP maka Lucene harus di porting ke PHP. Menurut beberapa sumber performance Lucene asli yang berplatform Java berbeda jauh dengan turunannya pada PHP dimana porting Lucene ke PHP memiliki performance lebih rendah. </li>
<li>Sphinx, aplikasi indexing yang mendukung integrasi dengan MySQL dan PHP. Dengan demikian kita dengan melakukan indexing data yang ada pada MySQL dan menggunakan hasil indexing pada Sphinx untuk pencarian dengan PHP. Pada dasarnya memang dikembangkan untuk dintegrasikan dengan database. </li>
</ul>
<p>Saya lebih memilih menggunakn Sphinx karena kemudahannya dalam integrasi dengan MySQL dan PHP. Namun bila anda tertarik dengan Lucene, Zend Framework juga memberikan dukungan kepada Lucene dengan mengembangkan component untuk Zend Framework untuk memudahkan pengembangan aplikasi dengan Lucene. </p>
<p>Konsep dalam melakukan integrasi dengan aplikasi web bisa dilakukan dengan cara sebagai berikut:</p>
<ul>
<li>Data disimpan dalam database dan external indexer. Jadi setiap memasukkan databaru dan update harus melakukan pada keduanya, database dan external indexer. </li>
<li>Untuk setiap pencarian dan penelusuran data yang biasa dilakukan dengan query SQL “SELECT” maka dilakukan pada external indexer bukan pada database. </li>
</ul>
<p>Dengan konsep diatas diharapkan dapat memberikan performance lebih baik untuk pencarian dan penelusuran data dalam database. Namun cara ini mengorbankan performance dalam penambahan dan perubahan data karena harus melakukannya 2 kali yaitu pada database dan external indexer. Jadi penggunaan external full text indexer sebaiknya hanya digunakan pada aplikasi dengan jumlah data yang sangat besar dan lebih banyak menjalankan fungsi pencarian data dan penelusuran data dibandingkan dengan penambahan dan perubahan data.</p>
<p>Referensi:</p>
<ul>
<li><a title="http://jayant7k.blogspot.com/2006/06/benchmarking-results-of-mysql-lucene.html" href="http://jayant7k.blogspot.com/2006/06/benchmarking-results-of-mysql-lucene.html">http://jayant7k.blogspot.com/2006/06/benchmarking-results-of-mysql-lucene.html</a> </li>
<li><a title="http://www.ibm.com/developerworks/library/os-php-sphinxsearch/" href="http://www.ibm.com/developerworks/library/os-php-sphinxsearch/">http://www.ibm.com/developerworks/library/os-php-sphinxsearch/</a> </li>
<li><a title="http://www.sphinxsearch.com" href="http://www.sphinxsearch.com">http://www.sphinxsearch.com</a> </li>
<li><a href="http://lucene.apache.org">http://lucene.apache.org</a> </li>
<li><a title="http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html" href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html">http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html</a> </li>
<li><a href="http://framework.zend.com/manual/en/zend.search.lucene.html">http://framework.zend.com/manual/en/zend.search.lucene.html</a> </li>
</ul>
<img src="http://www.thinkrooms.com/?ak_action=api_record_view&id=79&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.thinkrooms.com/2008/08/30/fulltext-indexing-untuk-mengoptimalkan-pencarian-data/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Screen Scrapper, aplikasi sejenis web crawler untuk mengambil data dari website lain</title>
		<link>http://www.thinkrooms.com/2008/08/25/screen-scrapper-aplikasi-sejenis-web-crawler-untuk-mengambil-data-dari-website-lain/</link>
		<comments>http://www.thinkrooms.com/2008/08/25/screen-scrapper-aplikasi-sejenis-web-crawler-untuk-mengambil-data-dari-website-lain/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 13:38:45 +0000</pubDate>
		<dc:creator>tyohan</dc:creator>
				<category><![CDATA[Prado Framework]]></category>
		<category><![CDATA[Web Developer]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.thinkrooms.com/2008/08/25/screen-scrapper-aplikasi-sejenis-web-crawler-untuk-mengambil-data-dari-website-lain/</guid>
		<description><![CDATA[Saya lagi mengerjakan aplikasi torrent search engine dimana aplikasi ini akan melakukan pencarian ke beberapa torrent indexer pada saat user memberi input keyword torrent yang ingin di cari. Intinya aplikasi ini akan mengambil data dari website lain dan menyajikannya ke user langsung dari aplikasi tersebut.Saya ingin menceritakan beberapa konsep dari aplikasi ini dan class PHP [...]]]></description>
			<content:encoded><![CDATA[<p>Saya lagi mengerjakan aplikasi torrent search engine dimana aplikasi ini akan melakukan pencarian ke beberapa torrent indexer pada saat user memberi input keyword torrent yang ingin di cari. Intinya aplikasi ini akan mengambil data dari website lain dan menyajikannya ke user langsung dari aplikasi tersebut.<br />Saya ingin menceritakan beberapa konsep dari aplikasi ini dan class PHP yang saya gunakan untuk membantu fungsi scrapper pada aplikasi ini. Seperti aplikasi web yang selalu saya bangun dengan Prado maka aplikasi ini juga saya bangun dengan Prado. Prado sangat membantu saya fokus pada logic aplikasi, tidak perlu memusingkan masalah template, caching, dan sebagainya.<br />Konsep kerja dari aplikasi ini adalah sebagai berikut:
<ol>
<li>User memasukkan keyword pada form search di aplikasi</li>
<li>Sesuai dengan keyword user maka aplikasi meload halaman results untuk menampilkan hasil pencarian.</li>
<li>Pada halaman results aplikasi akan melakukan AJAX callback ke aplikasi untuk memanggil fungsi screen scrapper untuk mengambil data dari torrent site indexer. Dengan AJAX maka aplikasi dapat mensimulasikan multi threading pada aplikasi.</li>
<li>Aplikasi akan mengambil data sesuai keyword dari torrent indexer seperti mininova, btjungkie, isohunt, dan lain-lain dengan menggunakan class CURL. CURL adalah class PHP yang berfungsi seperti browser sehingga kita dapat mengambil output HTML dari suatu website.</li>
<li>Hasil pengambilan HTML output akan diparser dimana parser harus dibuat masing-masing untuk tiap website yang ingin diambil datanya. Parser menggunakan phpQuery yang merupakan class PHP yang dibangun diatas class DOM untuk mengakses HTML DOM pada hasil HTML output dari website yang diambil datanya.</li>
<li>Hasil parser akan menyimpan data di database untuk digabungkan dengan semua hasil parser dari tiap web yang diambil datanya. Selain itu hasil juga akan menjadi cache bila ada user memasukkan keyword yang sama dalam jangka waktu tertentu.</li>
<li>Setelah proses parser selesai, aplikasi akan melakukan pencarian ke dalam database yang telah di index dengan full-text indexing sehingga memudahkan pencarian.</li>
<li>Hasil pencarian di database ditampilkan kepada user pada halaman results.</li>
</ol>
<p>Jadi dalam aplikasi ini ada  3 class yang berperan penting yaitu CURL, phpQuery, dan DOM. CURL dan DOM merupakan extension default PHP5 sedangkan phpQuery merupakan class tambahan yang merupakan ported jQuery dari javascript ke PHP untuk manipulasi DOM. <br />Saya juga sempat melakukan perbandingan performance antara DOM, phpQuery, Simple HTML Parser, dan DOMXPath dan hasilnya adalah phpQuery lebih cepat dari lainnya. Selain lebih mudah melakukan parsing ternyata performancenya juga cukup baik. Hasil penelusuran saya juga menemukan bahwa untuk pengambilan content dari website lain lebih baik menggunakan CURL dari pada fungsi lainnya seperti fsockopen. Hal ini merupakan hasil test dari developer lain, dan saya tidak melakukan test langsung karena beberapa developer juga meng-amini hal ini.</p>
<p>Aplikasi semacam ini bisa digunakan untuk aplikasi lain seperti mengambil data kurs dari website bank, aggregator blog atau website berita, dan juga pembaca rss feed. Semua tergantung kreatifitas anda.</p>
<img src="http://www.thinkrooms.com/?ak_action=api_record_view&id=76&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.thinkrooms.com/2008/08/25/screen-scrapper-aplikasi-sejenis-web-crawler-untuk-mengambil-data-dari-website-lain/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Optimalisasi kode program PHP</title>
		<link>http://www.thinkrooms.com/2008/07/08/optimalisasi-kode-program-php/</link>
		<comments>http://www.thinkrooms.com/2008/07/08/optimalisasi-kode-program-php/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 03:28:59 +0000</pubDate>
		<dc:creator>tyohan</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Web Developer]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.thinkrooms.com/?p=69</guid>
		<description><![CDATA[Kita sering menggunakan looping dalam aplikasi buatan kita seperti menggunakan for, while, foreach, dan sebagainya. Tahukan anda pemilihan penggunaan metode looping akan mempengaruhi kecepatan eksekusi aplikasi anda. Anda mungkintidak pernah memikirkan pentingnya optimalisasi kode program karena belum merasakan perbedaan berarti antara kode yang teroptimasi dan tidak. Namun bila anda telah merilis aplikasi anda dan digunakan [...]]]></description>
			<content:encoded><![CDATA[<p>Kita sering menggunakan looping dalam aplikasi buatan kita seperti menggunakan for, while, foreach, dan sebagainya. Tahukan anda pemilihan penggunaan metode looping akan mempengaruhi kecepatan eksekusi aplikasi anda. Anda mungkintidak pernah memikirkan pentingnya optimalisasi kode program karena belum merasakan perbedaan berarti antara kode yang teroptimasi dan tidak. Namun bila anda telah merilis aplikasi anda dan digunakan oleh sangat banyak pengguna maka optimasi aplikasi pasti akan sangat diperlukan.</p>
<p>Resource server akan sangat terbebani oleh aplikasi yang kodenya tidak dioptimalisasi. Banyak orang yang mengatakan bahwa penggunaan framework akan membuat kinerja aplikasi akan berkurang dan resource yang digunakan akan sangat besar dibandingkan tanpa framework. Hal ini tidak 100% benar karena menurut saya performance suatu aplikasi tergantung optimalisasi yang dilakukan. Penggunaan framework memang akan lebih membebani server namun dengan optimalisasi aplikasi maka hal ini bukan suatu kendala. Misalnya penggunaan cache, dengan cache maka isu OOP yang dianut framework yang katanya butuh resource lebih besar hanya berlaku  pada saat awal loading. Load berikutnya resource yang digunakan akan sangat berkurang karena penggunaan cache.</p>
<p>Selain teknik optimalisasi cache ada beragam optimalisasi aplikasi yang dapat kita lakukan. Salah satunya optimalisasi kode program. Optimalisasi kode program akan membantu mengurangi beban server dalam eksekusi kode program pada saat menerima request yang berlebihan. Optimalisasi kode program PHP merupakan optimalisasi yang sangat dasar dalam perancangan aplikasi web. Setelah kode aplikasi di optimalisasi maka dapat kita lanjutkan ke optimalisasi database, dan web server. Berikut adalah beberapa panduan untuk mengoptimalkan kode PHP anda:</p>
<ul>
<li>Sebisa mungkin deklarasikan method dalam class sebagai statik</li>
<li>Gunakan echo dibandingkan print untuk mengirimkan output ke browser.</li>
<li>Gunakan
<pre>echo ‘a’;
echo ‘b’;
echo ‘c’;</pre>
<p>Dibandingkan menggunakan</p>
<pre>$string='a'.'b'.'c';
echo $string;</pre>
</li>
<li>Gunakan foreach dibanding menggunakan while untuk penelusuran.</li>
<li>Unset variable yang telah selesai digunakan terutama variable yang membutuhkan memori besar seperti array.</li>
<li>Hindari penggunakan magic seperti _get, _set, _autoload</li>
<li>Penggunaan require_once membutuhkan resource cukup besar, jadi pergunakan seperlunya.</li>
<li>Gunakan fullpath untuk include atau require karena bila menggunakan variable untuk path misalnya OS Path maka diperlukan waktu tambahan untuk parsing variable.</li>
<li>Hindari penggunaan regex bila masih bisa menggunakan function string seperti srncasecmp, strpbrk, stripos, dan lain-lain.</li>
<li>Untuk perbandingan variable, === akan lebih baik dibandingkan hanya ==.</li>
<li>Tutup koneksi database bila sudah selesai digunakan.</li>
<li>Hindari ouput error sebisa mungkin dalam aplikasi rilis sebaiknya hanya digunakan dalam debugging aplikasi;</li>
<li>Jangan menggunakan fungsi dalam statement loop misalnya for ($x=0; $x &lt; count($array); $x)  karena akan memanggil fungsi untuk setiap loop.</li>
<li>Gunakan kutip untuk mengakses array. row[’id’] is 7  lebih cepat dari $row[id].</li>
<li>Hindari penggunaan variable global.</li>
<li>Gunakan single kutip dibanding menggunakan double kutip karena penggunaan double kutip akan mengecek variable di dalam string. Misalnya echo ‘Isi A=’.$a; lebih cepat dibandingkan echo “Isi A=$a”;</li>
<li>echo $a,$b,$c lebih cepat daripada echo $a.$b.$c</li>
<li>Sebisa mungkin gunakan html dari pada php untuk ouput. Misalnya
<pre>&lt;?php if($a):?&gt;

   &lt;p&gt;A benar&lt;/p&gt;
&lt;?php else:?&gt;

   &lt;p&gt;A salah&lt;/p&gt;
&lt;?php endif; ?&gt;</pre>
<p>Lebih baik dibandingkan</p>
<pre>&lt;?php
if($a)
	echo '&lt;p&gt; A benar &lt;/p&gt;';
else
	echo '&lt;p&gt; B salah &lt;/p&gt;;
?&gt;</pre>
</li>
<li>Gunakan pengecekan variable sebelum mengecek tipe variable. Karena pengecekan tipe variable yang tidak ada akan memakan resource lebih banyak.</li>
<li>++$i lebih baik daripada $i++</li>
<li>gunakan lowercase karena true lebih baik dariTRUE false lebih baik dari FALSE dan null lebih baik dari NULL</li>
<li>$var===null lebih baik daripada  is_null($var)</li>
<li>Untuk memanggil fungsi dalam class maka sebaiknya gunakan reference operator &amp;
<pre>$a= new ClassA;
$b=&amp; $a-&gt;fungsiA();</pre>
<p>akan lebih baik dibandingkan</p>
<pre>$a= new ClassA;
$b=$a-&gt;fungsiA();</pre>
</li>
</ul>
<p>Daftar diatas bukan nilai mutlak dari performance aplikasi anda karena perkembangan PHP memungkinkan optimasi kode program akan lebih baik. Sebaiknya selalu gunakan PHP versi terakhir karena akan selalu ada peningkatan performance. Contohnya PHP5 lebih lebih cepat dibandingkan PHP4. Beberapa panduan diatas hanya sekedar referensi untuk optimalisasi saja, terkadang untuk memudahkan maka kita tidak mengikuti panduan diatas. Hal itu tergantung pilihan dan kebutuhan anda sebagai web developer.</p>
<h3>Referensi:</h3>
<p><a title="http://reinholdweber.com/?p=3" href="http://reinholdweber.com/?p=3">http://reinholdweber.com/?p=3</a></p>
<p><a title="http://www.phpbench.com/" href="http://www.phpbench.com/">http://www.phpbench.com/</a></p>
<p><a title="http://phplens.com/lens/php-book/optimizing-debugging-php.php" href="http://phplens.com/lens/php-book/optimizing-debugging-php.php">http://phplens.com/lens/php-book/optimizing-debugging-php.php</a></p>
<p><a title="http://www.pradosoft.com/wiki/index.php/Coding_Conventions_and_Guidelines" href="http://www.pradosoft.com/wiki/index.php/Coding_Conventions_and_Guidelines">http://www.pradosoft.com/wiki/index.php/Coding_Conventions_and_Guidelines</a></p>
<img src="http://www.thinkrooms.com/?ak_action=api_record_view&id=69&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.thinkrooms.com/2008/07/08/optimalisasi-kode-program-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tutorial Dasar Perancangan Theme WordPress</title>
		<link>http://www.thinkrooms.com/2008/03/27/tutorial-dasar-perancangan-theme-wordpress/</link>
		<comments>http://www.thinkrooms.com/2008/03/27/tutorial-dasar-perancangan-theme-wordpress/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 02:19:31 +0000</pubDate>
		<dc:creator>tyohan</dc:creator>
				<category><![CDATA[Recommended]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Developer]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://thinkrooms.com/2008/03/27/tutorial-dasar-perancangan-theme-wordpress/</guid>
		<description><![CDATA[WordPress adalah blog engine terpopuler saat ini. Hal ini karena WordPress bersifat open dan mudah untuk dikostumasi dan ditambahkan fitur dengan bermacam template dan plugin yang tersedia secara gratis. Namun tentu ada ingin memiliki tampilan blog yang unik dan beda dengan yang lain. Untuk permulaan anda tentu dapat menggunakan theme yang telah tersedia. Atau juga [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.wordpress.org/">WordPress</a> adalah  blog engine terpopuler saat ini. Hal ini karena <a href="http://www.wordpress.org/">WordPress</a> bersifat open dan mudah untuk dikostumasi  dan ditambahkan fitur dengan bermacam template dan plugin yang tersedia secara  gratis. Namun tentu ada ingin memiliki tampilan blog yang unik dan beda dengan  yang lain. Untuk permulaan anda tentu dapat menggunakan theme yang telah  tersedia. Atau juga bisa menggunakan template default yaitu Kubrick. Namun  untuk anda yang ingin merancang sendiri tampilan blog WordPress anda inilah  caranya. Merancang theme <a href="http://www.wordpress.org/">WordPress</a> memerlukan keahlian HTML, CSS, dan dasar <a href="http://php.net/">PHP</a>.  Saya tidak mengajarkan hal tersebut disini.  Jadi kalau anda telah memiliki keahlian  tersebut silakan melanjutkan tutorial ini. Template yang kita rancang akan  menggunakan engine WordPress 2.3 yang merupakan versi mayor terbaru saat  tutorial ini dibuat yang telah mendukung widget secara default. Kebanyakan  template mendukung 1 sidebar saja, namun tutorial ini sidebar yang saya gunakan  ada 2 yaitu sidebar pada halaman depan atau hompage dan sidebar pada halaman  posting. Tujuannya agar kita bisa memberikan link yang sesuai dengan posting  agar pengunjung tertarik mengunjungi posting lainnya.</p>
<p>Konsep dari theme WordPress adalah menggunakan template tag.  Halaman theme akan digunakan sesuai dengan halaman yang diload. Contohnya pada  saat konten posting kita ditampilkan maka yang dipanggil adalah file  single.php. Bila yang ditampilkan adalah page maka yang dipanggil adalah  page.php. Demikian juga dengan pemanggilan archive, category, dan halaman  lainnya.</p>
<p>Agar lebih dapat dimengerti silakan ikut langkah tutorial  berikut. Berikut adalah langkah-langkah perancangan dasar theme WordPress:</p>
<p><span id="more-54"></span></p>
<ol>
<li>Langkah pertama siapkan template HTML &amp; CSS  yang sudah siap pakai. Template ini berupa template lengkap yang merupakan  halaman web statis yang akan kita ubah menjadi themes WordPress. Anda sebaiknya  merancang template HTML CSS terlebih dahulu sebelum mengubahnya menjadi themes  WordPress. Template ini nanti akan kita pilah-pilah menjadi bagian-bagian dari  theme WordPress. Berikut adalah kode HTML dari template basic kita:
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="container"&gt;
       &lt;div id="header"&gt;
       &lt;ul id="pagelist"&gt;
       &lt;li&gt;home&lt;/li&gt;
        &lt;li&gt;about&lt;/li&gt;
        &lt;li&gt;contact&lt;/li&gt;
    &lt;/ul&gt;
        &lt;h1&gt;Title Blog&lt;/h1&gt;
        &lt;h3&gt;Blog Description&lt;/h3&gt;
    &lt;/div&gt;
    &lt;div id="content"&gt;
       &lt;div id="content-right"&gt;
        &lt;h2&gt;Category&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;internet&lt;/li&gt;
                &lt;li&gt;flash&lt;/li&gt;
                &lt;li&gt;web&lt;/li&gt;
                &lt;li&gt;php&lt;/li&gt;
            &lt;/ul&gt;
         &lt;h2&gt;Archive&lt;/h2&gt;
            &lt;ul&gt;
                &lt;li&gt;03/2008&lt;/li&gt;
                &lt;li&gt;02/2008&lt;/li&gt;
                &lt;li&gt;01/2008&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/div&gt;
        &lt;div id="content-left"&gt;
              &lt;h2&gt;Posting title&lt;/h2&gt;
            &lt;div&gt;posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here.
            &lt;/div&gt;
            &lt;h2&gt;Posting title&lt;/h2&gt;
            &lt;div&gt;posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here.
            &lt;/div&gt;
            &lt;h2&gt;Posting title&lt;/h2&gt;
            &lt;div&gt;posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here.
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id="footer"&gt;
       &lt;p&gt;Basic Template Footer &lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Dan  file style.css yang merupakan file style dari template kita:</p>
<pre>@charset "utf-8";
body{
       font-family:Arial, Helvetica, sans-serif;
       }
#container {
       width: 955px;
       margin:0 auto;
}
#header{
       height:100px;
       border-bottom:1px dotted #666666;
       }
#searchform{
       float:right;
}
#pagelist{
       margin-top:20px;
       float:right;
       text-align:right;
       list-style:none;
       clear:right;
       text-transform:lowercase;
}
#pagelist li{
       float:left;
       text-align:right;
       margin-left:20px;
}
#content{
       margin-top:20px;
}
#content-left{
       width:582px;
       }
#content-right{
       background-color:#CCCCCC;
       float:right;
       width:360px;
       }
#content-right h2{
       margin-left:10px;
       }
#footer{
       margin-top:20px;
       clear:both;
       text-align:center;
       border-top:1px dotted #666666;
}</pre>
</li>
<li>Selanjutnya kita akan membagi atau memotong kode  HTML penyusun template diatas. Kode HTML kita bagi menjadi 4 bagian menjadi 4  file PHP yaitu:
<ul>
<li>Header.php, file yang akan menyimpan bagian  header theme WordPress. Yang perlu dipertimbangkan pada bagian ini adalah  header akan selalu di load atau ditampilkan pada tiap halaman WordPress kita.  Jadi potong bagian penting yang harus diload tiap kita akan membuka semua  halaman blog. Contohnya adalah bagian tag &lt;head&gt; pada file HTML dan  sedikit bagian pad tag &lt;body&gt; pada contoh template basic diatas bagian  yang dimasukkan adalah pada bagian header. Jadi untuk pemotongan awal inilah  isi dari file header.php:
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Untitled Document&lt;/title&gt;
&lt;link href="style.css" rel="stylesheet" type="text/css" /&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div id="container"&gt;
       &lt;div id="header"&gt;
        &lt;h1&gt;Title Blog&lt;/h1&gt;
        &lt;h3&gt;Blog Description&lt;/h3&gt;
    &lt;/div&gt;</pre>
</li>
<li>Index.php, yaitu file utama yang akan diload  pada saat pertama kali blog kita dibuka. File ini merupakan halaman depan dari  blog WordPress kita karena itu tempatkan bagian body dari HTML template basic  kita yang merupakan bagian konten utama dari template kita. Pada contoh  template basic yang merupakan konten utama adalah pada bagian konten posting di  blok content-left. Dengan demikian isi dari file index.php adalah sebagai  berikut:
<pre>&lt;div id="content-left"&gt;
              &lt;h2&gt;Posting title&lt;/h2&gt;
            &lt;div&gt;posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here.
            &lt;/div&gt;
            &lt;h2&gt;Posting title&lt;/h2&gt;
            &lt;div&gt;posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here.
            &lt;/div&gt;
            &lt;h2&gt;Posting title&lt;/h2&gt;
            &lt;div&gt;posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here. posting content here.
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;</pre>
</li>
<li>Sidebar.php, yaitu bagian sub content dari blog  kita. Pada sidebar kita menempatkan beberapa informasi singkat dari blog kita  seperti kategori, arsip, daftar link, dan sebagainya. Pada template basic yang dimaksud  sidebar adalah pada blok content-right. Karena itu isi dari file sidebar.php  adalah:
<pre>    &lt;div id="content"&gt;
           &lt;div id="content-right"&gt;
            &lt;h2&gt;Category&lt;/h2&gt;
                &lt;ul&gt;
                    &lt;li&gt;internet&lt;/li&gt;
                    &lt;li&gt;flash&lt;/li&gt;
                    &lt;li&gt;web&lt;/li&gt;
                    &lt;li&gt;php&lt;/li&gt;
                &lt;/ul&gt;
             &lt;h2&gt;Archive&lt;/h2&gt;
                &lt;ul&gt;
                    &lt;li&gt;03/2008&lt;/li&gt;
                    &lt;li&gt;02/2008&lt;/li&gt;
                    &lt;li&gt;01/2008&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;</pre>
</li>
<li>Footer.php, hampir sama dengan bagian header  yaitu bagian penutup blog yang akan selalu diload setiap blog kita diakses.  Dengan demikian pada bagian template basic kita yang dimaksud adalah blok  footer. Kita bisa menempatkan kode javascript pada bagian ini. Isi dari  footer.php akan menjadi sebagai berikut:
<pre>    &lt;div id="footer"&gt;
           &lt;p&gt;Basic Template Footer &lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;/body&gt;
    &lt;/html&gt;</pre>
</li>
</ul>
</li>
<li>Setelah selesai membagi template basic kita  menjadi sub-sub template maka selanjutnya kita akan mengubah kode-kode HTML biasa  dengan menambahkan beberapa kode PHP yang merupakan template tag dari  WordPress. Template tag ini berfungsi untuk meload isi sebenarnya blog kita  dari engine blog WordPress. Dengan demikian template tag akan menampilkan isi-isi  dari blog. Berikut adalah perubahan pada file themes basic WordPress yang telah  kita potong-potong sebelumnya:
<ul>
<li>Header.php, pada file ini kita menempatkan  template tag yang akan meload beberapa komponen blog seperti blog-title,  blog-description, page-menu, dan lain-lain. File ini bisa dipanggil dengan template  tag &lt;?php get_header(); ?&gt;.  Berikut isi file header.php yang kita ubah:
<pre>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" &lt;?php language_attributes(); ?&gt;&gt;

&lt;head profile="http://gmpg.org/xfn/11"&gt;
&lt;meta http-equiv="Content-Type" content="&lt;?php bloginfo('html_type'); ?&gt;; charset=&lt;?php bloginfo('charset'); ?&gt;" /&gt;

&lt;title&gt;&lt;?php bloginfo('name'); ?&gt; &lt;?php if ( is_single() ) { ?&gt; » Blog Archive &lt;?php } ?&gt; &lt;?php wp_title(); ?&gt;&lt;/title&gt;
&lt;meta name="generator" content="WordPress &lt;?php bloginfo('version'); ?&gt;" /&gt;
&lt;link rel="stylesheet" href="&lt;?php bloginfo('stylesheet_url'); ?&gt;" type="text/css" media="screen" /&gt;
&lt;link rel="alternate" type="application/rss+xml" title="&lt;?php bloginfo('name'); ?&gt; RSS Feed" href="&lt;?php bloginfo('rss2_url'); ?&gt;" /&gt;
&lt;link rel="pingback" href="&lt;?php bloginfo('pingback_url'); ?&gt;" /&gt;
&lt;?php wp_head(); ?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id="container"&gt;
       &lt;div id="header"&gt;
        &lt;h1&gt;&lt;a href="&lt;?php echo get_option('home'); ?&gt;/"&gt;&lt;?php bloginfo('name'); ?&gt;&lt;/a&gt;&lt;/h1&gt;
        &lt;h3&gt;&lt;?php bloginfo('description'); ?&gt;&lt;/h3&gt;
        &lt;div id="searchform"&gt;
              &lt;form method="get" id="searchform" action="&lt;?php bloginfo('url'); ?&gt;/"&gt;
            &lt;input type="text" value="&lt;?php the_search_query(); ?&gt;" name="s" id="s" /&gt;
            &lt;input type="submit" id="searchsubmit" value="Search" /&gt;
            &lt;/form&gt;
         &lt;/div&gt;
&lt;ul id="pagelist"&gt;&lt;li&gt;&lt;a href="&lt;?php bloginfo('url'); ?&gt;"&gt;home&lt;/a&gt;&lt;/li&gt;&lt;?php wp_list_pages('depth=1&amp;title_li='); ?&gt;&lt;/ul&gt;
    &lt;/div&gt;</pre>
</li>
<li>Index.php, pada file ini kita akan meload daftar  posting yang kita miliki. Berikut isi dari perubahan pada file index.php:
<pre>&lt;?php get_header(); ?&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;div id="content-left"&gt;
        &lt;?php if (have_posts()) : ?&gt;

              &lt;?php while (have_posts()) : the_post(); ?&gt;

                     &lt;div id="post-&lt;?php the_ID(); ?&gt;"&gt;
                            &lt;h2&gt;&lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Permanent Link to &lt;?php the_title_attribute(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
                            &lt;small&gt;&lt;?php the_time('F jS, Y') ?&gt;  by &lt;?php the_author() ?&gt; &lt;/small&gt;

                            &lt;div&gt;
                                  &lt;?php the_content('Read the rest of this entry »'); ?&gt;
                            &lt;/div&gt;

                            &lt;p class="postmetadata"&gt;&lt;?php the_tags('Tags: ', ', ', '&lt;br /&gt;'); ?&gt; Posted in &lt;?php the_category(', ') ?&gt; | &lt;?php edit_post_link('Edit', '', ' | '); ?&gt;  &lt;?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?&gt;&lt;/p&gt;
                     &lt;/div&gt;

              &lt;?php endwhile; ?&gt;

              &lt;div class="navigation"&gt;
                     &lt;div class="nav-left"&gt;&lt;?php next_posts_link('« Older Entries') ?&gt;&lt;/div&gt;
                     &lt;div class="nav-right"&gt;&lt;?php previous_posts_link('Newer Entries »') ?&gt;&lt;/div&gt;
              &lt;/div&gt;

       &lt;?php else : ?&gt;

              &lt;h2&gt;Not Found&lt;/h2&gt;
              &lt;p&gt;Sorry, but you are looking for something that isn't here.&lt;/p&gt;
              &lt;?php include (TEMPLATEPATH . "/searchform.php"); ?&gt;

       &lt;?php endif; ?&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;/div&gt;
&lt;?php get_footer(); ?&gt;</pre>
</li>
<li>Sidebar.php, pada file ini kita akan meload  beberapa widget yang telah kita set pada wordpress administrator. Sidebar yang  diload ada 2 macam. Bila sidebar dipanggil oleh hompage atau page biasa maka  yang diload adalah sidebar 1, sedangkan bila sidebar dipanggil oleh single post  atau halaman yang menampilkan isi posting maka yang dipanggil adalah sidebar 2.  File ini dipanggil dengan template tag &lt;?php get_sidebar(); ?&gt; Berikut  adalah isi perubahan pada file sidebar.php:
<pre>&lt;div id="content"&gt;
    &lt;div id="content-right"&gt;
        &lt;?php if ( function_exists('dynamic_sidebar')): ?&gt;
              &lt;?php if (is_single()): dynamic_sidebar(2) ?&gt;
        &lt;?php else : dynamic_sidebar(1) ?&gt;
        &lt;?php endif; ?&gt;  
       &lt;?php endif; ?&gt;          
&lt;/div&gt;</pre>
</li>
<li>Footer.php, pada file ini tidak terlalu banyak  fungsi yang penting. Hanya sedikit informasi mengenai blog ini. File ini  dipanggil dengan template tag &lt;?php get_footer(); ?&gt;. Berikut adalah isi  dari footer.php:
<pre>&lt;div id="footer"&gt;
       &lt;p&gt;
              &lt;?php bloginfo('name'); ?&gt; is proudly powered by
              &lt;a href="http://wordpress.org/"&gt;WordPress&lt;/a&gt;
              &lt;br /&gt;&lt;a href="&lt;?php bloginfo('rss2_url'); ?&gt;"&gt;Entries (RSS)&lt;/a&gt;
              and &lt;a href="&lt;?php bloginfo('comments_rss2_url'); ?&gt;"&gt;Comments (RSS)&lt;/a&gt;.
              &lt;!-- &lt;?php echo get_num_queries(); ?&gt; queries. &lt;?php timer_stop(1); ?&gt; seconds. --&gt;
       &lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;?php wp_footer(); ?&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</li>
</ul>
</li>
<li>Setelah mengubah file template basic kita  menjadi file theme  WordPress maka kita  perlu menambahkan beberapa file theme lagi untuk melengkapi theme kita agar  dapat bekerja secara penuh. Berikut ada file-file yang perlu kita buat:
<ul>
<li>Single.php, merupakan file theme turuan dari  index.php. Strukturnya hampir sama namun yang membedakan adalah isi yang  diload. Anda bisa mengkopi file index.php dan menyimpannya dengan filename  single.php dan mengubahnya sedikit.  Pada  bagian isi posting dan postmetadata Berikut adalah isi dari file single.php:
<pre>&lt;?php get_header(); ?&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;div id="content-left"&gt;
              &lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;
                     &lt;div id="post-&lt;?php the_ID(); ?&gt;"&gt;
            &lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
            &lt;small&gt;&lt;?php the_time('F jS, Y') ?&gt;  by &lt;?php the_author() ?&gt; &lt;/small&gt;
            &lt;div&gt;
                &lt;?php the_content('&lt;p class="serif"&gt;Read the rest of this entry »&lt;/p&gt;'); ?&gt;
            &lt;?php wp_link_pages(array('before' =&gt; '&lt;p&gt;&lt;strong&gt;Pages:&lt;/strong&gt; ', 'after' =&gt; '&lt;/p&gt;', 'next_or_number' =&gt; 'number')); ?&gt;
            &lt;?php the_tags( '&lt;p&gt;Tags: ', ', ', '&lt;/p&gt;'); ?&gt;
            &lt;/div&gt;
            &lt;p class="postmetadata alt"&gt;
            &lt;small&gt;
            This entry was posted on &lt;?php the_time('l, F jS, Y') ?&gt; at &lt;?php the_time() ?&gt;
            and is filed under &lt;?php the_category(', ') ?&gt;.
            You can follow any responses to this entry through the &lt;?php comments_rss_link('RSS 2.0'); ?&gt; feed.
            &lt;?php if (('open' == $post-&gt; comment_status) &amp;&amp; ('open' == $post-&gt;ping_status)) {
                // Both Comments and Pings are open ?&gt;
                You can &lt;a href="#respond"&gt;leave a response&lt;/a&gt;, or &lt;a href="&lt;?php trackback_url(); ?&gt;" rel="trackback"&gt;trackback&lt;/a&gt; from your own site.
            &lt;?php } elseif (!('open' == $post-&gt; comment_status) &amp;&amp; ('open' == $post-&gt;ping_status)) {
                // Only Pings are Open ?&gt;
                Responses are currently closed, but you can &lt;a href="&lt;?php trackback_url(); ?&gt; " rel="trackback"&gt;trackback&lt;/a&gt; from your own site.
            &lt;?php } elseif (('open' == $post-&gt; comment_status) &amp;&amp; !('open' == $post-&gt;ping_status)) {
                // Comments are open, Pings are not ?&gt;
                You can skip to the end and leave a response. Pinging is currently not allowed.

            &lt;?php } elseif (!('open' == $post-&gt; comment_status) &amp;&amp; !('open' == $post-&gt;ping_status)) {
                // Neither Comments, nor Pings are open ?&gt;
                Both comments and pings are currently closed.
            &lt;?php } edit_post_link('Edit this entry.','',''); ?&gt;
            &lt;/small&gt;
            &lt;/p&gt;
                     &lt;/div&gt;
       &lt;div class="navigation"&gt;
        &lt;div class="nav-left"&gt;&lt;?php next_posts_link('« Older Entries') ?&gt;&lt;/div&gt;
        &lt;div class="nav-right"&gt;&lt;?php previous_posts_link('Newer Entries »') ?&gt;&lt;/div&gt;
       &lt;/div&gt;
       &lt;?php comments_template(); ?&gt;
       &lt;?php endwhile; else: ?&gt;
              &lt;p&gt;Sorry, no posts matched your criteria.&lt;/p&gt;
&lt;?php endif; ?&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;?php get_footer(); ?&gt;</pre>
</li>
<li>Selain single.php yang memiliki struktur mirip  dengan index.php ada juga file yang mirip yaitu page.php. File ini digunakan  untuk menampilkan halaman yang dibuat. Contohnya halaman about dan contact. Berikut  contoh page.php:
<pre>&lt;?php get_header(); ?&gt;
&lt;?php get_sidebar(); ?&gt;
&lt;div id="content-left"&gt;
&lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;
       &lt;div id="post-&lt;?php the_ID(); ?&gt;"&gt;
              &lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
              &lt;div&gt;
              &lt;?php the_content('&lt;p class="serif"&gt;Read the rest of this entry »&lt;/p&gt;'); ?&gt;
              &lt;?php wp_link_pages(array('before' =&gt; '&lt;p&gt;&lt;strong&gt;Pages:&lt;/strong&gt; ', 'after' =&gt; '&lt;/p&gt;', 'next_or_number' =&gt; 'number')); ?&gt;
              &lt;/div&gt;
       &lt;/div&gt;
&lt;?php endwhile; else: ?&gt;
    &lt;p&gt;Sorry, no posts matched your criteria.&lt;/p&gt;
&lt;?php endif; ?&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;?php get_footer(); ?&gt;</pre>
</li>
<li>Untuk menampilkan daftar komentar pada suatu  post maka diperlukan file comments.php. File ini dapat dipanggil dengan  template tag  &lt;?php  comments_template(); ?&gt;
<pre>&lt;?php // Do not delete these lines
       if ('comments.php' == basename($_SERVER['SCRIPT_FILENAME']))
              die ('Please do not load this page directly. Thanks!');
       if (!empty($post-&gt;post_password)) { // if there's a password
              if ($_COOKIE['wp-postpass_' . COOKIEHASH] != $post-&gt;post_password) {  // and it doesn't match the cookie
                     ?&gt;
                     &lt;p class="nocomments"&gt;This post is password protected. Enter the password to view comments.&lt;/p&gt;
                     &lt;?php
                     return;
              }
       }
       /* This variable is for alternating comment background */
       $oddcomment = 'class="alt" ';
?&gt;
&lt;?php if ($comments) : ?&gt;
       &lt;h3 id="comments"&gt;&lt;?php comments_number('No Responses', 'One Response', '% Responses' );?&gt; to “&lt;?php the_title(); ?&gt;”&lt;/h3&gt;
       &lt;ol&gt;
       &lt;?php foreach ($comments as $comment) : ?&gt;
              &lt;li &lt;?php echo $oddcomment; ?&gt;id="comment-&lt;?php comment_ID() ?&gt;"&gt;
                     &lt;?php comment_author_link() ?&gt; says:
                     &lt;?php if ($comment-&gt;comment_approved == '0') : ?&gt;
                     &lt;em&gt;Your comment is awaiting moderation.&lt;/em&gt;
                     &lt;?php endif; ?&gt;
                     &lt;br /&gt;
                     &lt;small&gt;&lt;a href="#comment-&lt;?php comment_ID() ?&gt;" title=""&gt;&lt;?php comment_date('j F Y') ?&gt; at &lt;?php comment_time() ?&gt;&lt;/a&gt; &lt;?php edit_comment_link('edit','  ',''); ?&gt;&lt;/small&gt;
                     &lt;?php comment_text() ?&gt;
              &lt;/li&gt;
       &lt;?php  $oddcomment = ( empty( $oddcomment ) ) ? 'class="alt" ' : ''; ?&gt;
       &lt;?php endforeach; /* end for each comment */ ?&gt;
       &lt;/ol&gt;
 &lt;?php else : // this is displayed if there are no comments so far ?&gt;
       &lt;?php if ('open' == $post-&gt;comment_status) : ?&gt;
              &lt;!-- If comments are open, but there are no comments. --&gt;
        &lt;?php else : // comments are closed ?&gt;
              &lt;!-- If comments are closed. --&gt;
              &lt;p&gt;Comments are closed.&lt;/p&gt;
       &lt;?php endif; ?&gt;
&lt;?php endif; ?&gt;
&lt;?php if ('open' == $post-&gt;comment_status) : ?&gt;
&lt;h3 id="respond"&gt;Leave a Reply&lt;/h3&gt;
&lt;?php if ( get_option('comment_registration') &amp;&amp; !$user_ID ) : ?&gt;
&lt;p&gt;You must be &lt;a href="&lt;?php echo get_option('siteurl'); ?&gt;/wp-login.php?redirect_to=&lt;?php echo urlencode(get_permalink()); ?&gt;"&gt;logged in&lt;/a&gt; to post a comment.&lt;/p&gt;
&lt;?php else : ?&gt;
&lt;form action="&lt;?php echo get_option('siteurl'); ?&gt;/wp-comments-post.php" method="post" id="commentform"&gt;
&lt;?php if ( $user_ID ) : ?&gt;
&lt;p&gt;Logged in as &lt;a href="&lt;?php echo get_option('siteurl'); ?&gt;/wp-admin/profile.php"&gt;&lt;?php echo $user_identity; ?&gt;&lt;/a&gt;. &lt;a href="&lt;?php echo get_option('siteurl'); ?&gt;/wp-login.php?action=logout" title="Log out of this account"&gt;Logout »&lt;/a&gt;&lt;/p&gt;
&lt;?php else : ?&gt;
&lt;p&gt;&lt;input type="text" name="author" id="author" value="&lt;?php echo $comment_author; ?&gt;" size="22" tabindex="1" /&gt;
&lt;label for="author"&gt;&lt;small&gt;Name &lt;?php if ($req) echo "(required)"; ?&gt;&lt;/small&gt;&lt;/label&gt;&lt;/p&gt;
&lt;p&gt;&lt;input type="text" name="email" id="email" value="&lt;?php echo $comment_author_email; ?&gt;" size="22" tabindex="2" /&gt;
&lt;label for="email"&gt;&lt;small&gt;Mail (will not be published) &lt;?php if ($req) echo "(required)"; ?&gt;&lt;/small&gt;&lt;/label&gt;&lt;/p&gt;
&lt;p&gt;&lt;input type="text" name="url" id="url" value="&lt;?php echo $comment_author_url; ?&gt;" size="22" tabindex="3" /&gt;
&lt;label for="url"&gt;&lt;small&gt;Website&lt;/small&gt;&lt;/label&gt;&lt;/p&gt;
&lt;?php endif; ?&gt;
&lt;p&gt;&lt;textarea name="comment" id="comment" cols="50%" rows="10" tabindex="4"&gt;&lt;/textarea&gt;&lt;/p&gt;
&lt;p&gt;&lt;input name="submit" type="submit" id="submit" tabindex="5" value="Submit Comment" /&gt;
&lt;input type="hidden" name="comment_post_ID" value="&lt;?php echo $id; ?&gt;" /&gt;&lt;/p&gt;
&lt;?php do_action('comment_form', $post-&gt;ID); ?&gt;
&lt;/form&gt;
&lt;?php endif;?&gt;
&lt;?php endif;?&gt;</pre>
</li>
<li>Berikutnya adalah file functions.php yang merupakan  file untuk menyimpan fungsi-fungsi yang berkaitan dengan theme buatan kita.  Pada file ini kita mendeklarasikan widget yang kita inginkan. Pada file ini  juga dapat memberi fungsi tambahan untuk administrasi theme dari WordPress  administrator:
<pre>&lt;?php
if ( function_exists('register_sidebar') ){
    register_sidebars(2,array('before_widget' =&gt; '&lt;div id="%1$s" class="widget %2$s"&gt;',
'after_widget' =&gt; "&lt;/div&gt;",
'before_title' =&gt; '&lt;h2&gt;',
'after_title' =&gt; "&lt;/h2&gt;"));
       }
?&gt;</pre>
</li>
</ul>
</li>
<li>Selesailah theme WordPress kita. Sebenarnya  masih ada file file lain yang dibutuhkan untuk menampilkan secara keseluruhan  fungsi blog WordPress. Akan tetapi file tersebut tidak bersifat harus ada. Bila  file tersebut tidak ada blog kita masih dapat menampilkan konten dengan baik.  File-file itu dapat tergantikan oleh file default atau oleh file lainnya. Contohnya  adalah archive.php,search.php,category.php, dll. Bila ingin tampilan theme anda  dapat lebih spesifik maka anda dapat melengkapi file-file tersebut. Anda  tinggal meng-copy semua file tersebut ke dalam 1 folder dan memasukkannya ke  folder theme WordPress. Selanjutnya anda dapat mengaktifkan theme buatan anda  dari menu Presentation pada WordPress Administrator.</li>
</ol>
<p>Bila ingin menggunakan theme WordPress yang lebih lengkap  maka theme default WordPress 2.3 adalah permulaan yang bagus. Kelengkapan  fungsi dan file theme dapat dijadikan referensi untuk pengembangan theme anda  sendiri.  Contoh theme wordpress yang  kita gunakan diatas merupakan theme yang sangat dasar. Anda dapat memperbaiki  theme tersebut dengan memodifikasi theme dan CSS dari theme tersebut. Anda juga  dapat menambahkan beberapa gambar agar lebih menarik. Selamat berkreasi.</p>
<h3>Referensi</h3>
<ul>
<li><a href="http://codex.wordpress.org">http://codex.wordpress.org</a></li>
<li><a href="http://codex.wordpress.org/Templates">http://codex.wordpress.org/Templates</a></li>
<li><a href="http://codex.wordpress.org/Theme_Development">http://codex.wordpress.org/Theme_Development</a></li>
<li><a href="http://codex.wordpress.org/Blog_Design_and_Layout">http://codex.wordpress.org/Blog_Design_and_Layout</a></li>
<li><a href="http://codex.wordpress.org/Developer_Documentation">http://codex.wordpress.org/Developer_Documentation</a></li>
</ul>
<img src="http://www.thinkrooms.com/?ak_action=api_record_view&id=54&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.thinkrooms.com/2008/03/27/tutorial-dasar-perancangan-theme-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.473 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-07-31 05:03:16 -->
