<?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>syahzul &#187; Tutorial</title>
	<atom:link href="http://www.syahzul.com/category/tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.syahzul.com</link>
	<description>between creativity and stupidity</description>
	<lastBuildDate>Mon, 06 Sep 2010 20:30:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Kod .htaccess yang berguna untuk website</title>
		<link>http://www.syahzul.com/tutorial/2010/09/kod-htaccess-yang-berguna-untuk-website/</link>
		<comments>http://www.syahzul.com/tutorial/2010/09/kod-htaccess-yang-berguna-untuk-website/#comments</comments>
		<pubDate>Fri, 03 Sep 2010 20:09:15 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[web hosting]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=698</guid>
		<description><![CDATA[Jika kita perhatikan, kebanyakan web hosting di Malaysia biasanya menggunakan Apache Web Server. Ianya jauh lebih murah berbanding dengan menggunakan IIS yang ada pada platform Windows. Dan saya lebih suka dengan Apache berbanding dengan IIS. Apache terkenal dengan .htaccess yang ... ]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-704 post-image" title="Kos htaccess yang berguna untuk website anda" src="http://www.syahzul.com/wp-content/uploads/2010/09/htaccess.jpg" alt="" width="690" height="300" /></p>
<p>Jika kita perhatikan, kebanyakan web hosting di Malaysia biasanya menggunakan Apache Web Server. Ianya jauh lebih murah berbanding dengan menggunakan IIS yang ada pada platform Windows. Dan saya lebih suka dengan Apache berbanding dengan IIS.</p>
<p>Apache terkenal dengan .htaccess yang mana kita boleh mengawal beberapa aspek untuk website kita. Antaranya, yang paling popular ialah membuat redirection dari URL yang tiada www ke URL yang mempunyai www, contohnya, jika anda cuba masuk ke <a href="http://syahzul.com">http://syahzul.com</a>, server saya akan redirect anda ke <a href="http://www.syahzul.com">http://www.syahzul.com</a>. Ini dapat menjamin <a href="http://en.wikipedia.org/wiki/PageRank" target="_blank">PageRank™</a> saya tidak terbahagi kepada dua. Kali ini saya nak share beberapa kod .htaccess yang berguna pada website kita.</p>
<p><span id="more-698"></span><br />
Cara menggunakan kod ini adalah mudah, hanya masukkannya ke dalam fail .htaccess sahaja. Jika anda belum ada fail tersebut, boleh create baru. Dan jangan lupa tukar kepada domain anda sendiri dalam kod tu.</p>
<h2>Redirect dari URL yang tiada www ke URL yang ada www</h2>
<p>Seperti yang saya terangkan di atas tadi, kod berikut akan membuat redirect ke URL domain anda yang <strong>tiada www</strong> ke URL yang <strong>ada www</strong>.</p>
<pre class="brush: plain;">RewriteEngine On
RewriteCond %{HTTP_HOST} ^syahzul.com
RewriteRule (.*) http://www.syahzul.com/$1 [R=301,L]</pre>
<h2>Redirect dari URL yang ada www ke URL yang tiada www</h2>
<p>Manakala kod berikut pula akan membuat redirect ke URL domain anda yang <strong>ada www</strong> ke URL yang <strong>tiada www</strong>.</p>
<pre class="brush: plain;">RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.syahzul.com [NC]
RewriteRule ^(.*)$ http://syahzul.com/$1 [L,R=301]</pre>
<h2>Prevent directory browsing</h2>
<p>Jika anda mempunyai satu folder di dalam webserver yang digunakan untuk menyimpan fail fail seperti ebook, software dan lain lain, sekiranya folder tersebut tiada fail index.html, pelawat boleh selongkar isi dalam folder tersebut. Kod di bawah ini boleh mengelakkan folder tersebut daripada diselongkar oleh pelawat anda.</p>
<pre class="brush: plain;"># Added to prevent directory browsing
Options -Indexes</pre>
<h2>File execution order</h2>
<p>Jika di dalam folder public_html anda mempunyai fail index.html dan index.php, fail index.html mempunyai priority yang lebih tinggi dan akan dipanggil terlebih dahulu. Dan kebanyakan web scripts menggunakan fail index.php sebagai entry point. Anda boleh delete sahaja fail index.html tersebut, tiada masalah. Tapi kod di bawah ini juga boleh kita gunakan untuk memberikan priority kepada fail index.php.</p>
<pre class="brush: plain;">DirectoryIndex index.php index.html</pre>
<h2>Compress fail CSS, Javascript, Text dan XML</h2>
<p>Kod ini bertujuan untuk compress output kod kod CSS, Javascript, Text dan XML sebelum dipaparkan ke browser. Tujuannya, untuk menjimatkan masa proses dan juga menjimatkan penggunaan bandwidth.</p>
<pre class="brush: plain;">&lt;IfModule mod_deflate.c&gt;
	AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
&lt;/IfModule&gt;</pre>
<h2>Cache image</h2>
<p>Pada website kita, setiap kali pelawat datang melawat, web server akan dapatkan semua fail yang diperlukan, seperti fail fail CSS dan Javascripts, dan juga gambar atau imej. Kita boleh gunakan kod di bawah ini untuk cache fail fail tesebut pada website kita, jadi setiap kali pelawat yang sama datang, server akan load fail dari cache. Ini dapat mempercepatkan masa loading.</p>
<pre class="brush: plain;">&lt;IfModule mod_expires.c&gt;
	ExpiresActive On
	ExpiresByType image/gif A432000
	ExpiresByType image/jpg A432000
	ExpiresByType image/jpeg A432000
	ExpiresByType image/png A432000
	ExpiresByType image/ico A432000
	ExpiresByType image/bmp A432000
	ExpiresByType text/css A432000
	ExpiresByType text/javascript A432000
	ExpiresByType application/javascript A432000
	ExpiresByType application/x-javascript A432000
&lt;/IfModule&gt;</pre>
<p><strong>Nota:</strong><br />
<em>Kod di atas ini akan cache fail fail itu selama 5 hari (atau 432000 saat). Anda boleh tukar tempoh untuk cache itu valid, pastikan gunakan format saat.</em></p>
<h2>Protect .htaccess file</h2>
<p>Kod berikut bertujuan mengelakkan fail .htaccess kita dibaca secara terus daripada web browser.</p>
<pre class="brush: plain;">
&lt;Files .htaccess&gt;
	order allow,deny
	deny from all
&lt;/Files&gt;
</pre>
<h2>Prevent hotlinking</h2>
<p>Ada kalanya blogger lain suka buat hotlinking imej daripada blog atau website kita. Jika blog mereka itu banyak pelawat yang tengok post yang ada imej dari website kita, bandwidth kita yang akan di makan, bukan bandwidth mereka. Jadi anda boleh gunakan kod di bawah untuk elakkan hotlinking daripada berlaku, dan kita gantikannya dengan imej lain.</p>
<pre class="brush: plain;">RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?syahzul\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .*\.(jpg|gif|bmp|png)$ http://hotlink.syahzul.com/hotlinking-is-not-allowed.jpg [L]</pre>
<p><strong>Nota:</strong><br />
<em>Anda boleh gunakan upload imej notis itu di imej hosting site seperti <a href="http://imageshack.us" target="_blank">ImageShack</a> untuk mengelakkan bandwidth anda di makan.</em></p>
<h2>Ubah lokasi folder untuk domain anda dari public_html ke folder lain</h2>
<p>Sebagai contoh, jika saya telahpun mempunyai website yang berada di dalam folder <strong>public_html</strong>, dan kemudian saya ingin update website tersebut, tapi tak mahu orang lain tengok lagi, dan tak mahu kacau website yang sedia ada. Cara yang paling mudah ialah membina website baru itu di dalam satu subfolder lain di dalam <strong>public_html</strong>, contohnya saya letakkan di dalam <strong>public_html/v2</strong>. Selepas selesai, saya ingin gantikan website lama tersebut dengan yang baru ini. Untuk memindahkan fail dan folder yang sedia ada, amatlah menyusahkan. Jadi, kita boleh gunakan kod .htaccess untuk memberitahu Apache untuk menggunakan folder <strong>v2</strong> itu tadi untuk domain kita.</p>
<pre class="brush: plain;">RewriteEngine On
RewriteCond %{HTTP_HOST} ^syahzul\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.syahzul\.com$
RewriteCond %{REQUEST_URI} !^/v2/
RewriteRule (.*) /v2/$1 [L]</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/tutorial/2010/09/kod-htaccess-yang-berguna-untuk-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial: Bina Slideshow Plugin Untuk WordPress 3.0.x</title>
		<link>http://www.syahzul.com/tutorial/2010/08/tutorial-bina-slideshow-plugin-untuk-wordpress-3-0-x/</link>
		<comments>http://www.syahzul.com/tutorial/2010/08/tutorial-bina-slideshow-plugin-untuk-wordpress-3-0-x/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 23:18:10 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[slideshow]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=632</guid>
		<description><![CDATA[Atas permintaan saudara lazaac, tutorial ini sama seperti tutorial saya sebelum ini, Tutorial: Bina Module Slideshow untuk Joomla! 1.5.x cuma kali ini saya jadikan ia plugin untuk WordPress pula. Ini merupakan percubaan kali pertama saya membina plugin untuk WordPress, jadi sebarang komen ... ]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-695 post-image" title="Tutorial Bina Slideshow Plugin Untuk WordPress 3.0.x" src="http://www.syahzul.com/wp-content/uploads/2010/08/myslideshow_wordpress-690x1981.jpg" alt="" width="690" height="300" /></p>
<p>Atas permintaan saudara <a href="http://lazaac.com/blog">lazaac</a>, tutorial ini sama seperti tutorial saya sebelum ini, <a href="http://www.syahzul.com/tutorial/2010/08/tutorial-bina-module-slideshow-untuk-joomla-1-5-x/">Tutorial: Bina Module Slideshow untuk Joomla! 1.5.x</a> cuma kali ini saya jadikan ia plugin untuk WordPress pula. Ini merupakan percubaan kali pertama saya membina plugin untuk WordPress, jadi sebarang komen dan feedback amatlah saya hargai. Sama seperti tutorial membina <a href="http://www.syahzul.com/tutorial/2010/08/tutorial-bina-module-slideshow-untuk-joomla-1-5-x/">module slideshow untuk Joomla!</a> yang lepas, plugin ini juga menggunakan jQuery dan Coin Slider.</p>
<p><span id="more-632"></span></p>
<h2>Keperluan</h2>
<p><a href="http://http://wordpress.org/">WordPress 3.0.x</a> (sila gunakan yang terkini)</p>
<p>Code Editor (saya guna <a href="http://www.pspad.com/">PSPad</a>, percuma)</p>
<p><a href="http://workshop.rs/projects/coin-slider/">Coin Slider</a> for jQuery</p>
<h2>Langkah 1</h2>
<p><img class="alignright size-full wp-image-658" title="Gambar contoh struktur folder dan files" src="http://www.syahzul.com/wp-content/uploads/2010/08/plugin_folder1.jpg" alt="" width="226" height="189" />Perbezaan antara WP dan Joomla! ialah cara kita install extension (plugin untuk WP, component, module, plugin untuk Joomla!). Pada Joomla!, kita perlu gunakan Joomla! Extension Installer bagi memastikan ianya dipasang dengan betul. Berbeza dengan WP yang mana kita hanya perlu create folder di dalam <strong>wp-content/plugins</strong> pada WP kita sahaja. Cukup mudah.</p>
<p>Sekarang, create satu folder di dalam <strong>wp-content/plugins</strong>, dan berikan nama <strong>myslideshow. </strong>Kemudian, create file <strong>myslideshow.php</strong> <span style="color: #ff0000;">di dalam</span> folder myslideshow tadi. Di dalam fail <a href="http://coin-slider.googlecode.com/files/coin-slider.zip"><strong>coin-slider.zip</strong></a> yang anda download terdapat 3 files. Copy file berikut sahaja</p>
<ol>
<li><strong>coin-slider-styles.css</strong> ke dalam folder <strong><strong>myslideshow</strong></strong></li>
<li><strong>coin-slider.min.js</strong> ke dalam folder <strong><strong>myslideshow</strong></strong></li>
</ol>
<p><em><span style="color: #999999;">* Rujuk gambar di sebelah.</span></em></p>
<p><em><span style="color: #999999;">** Kita tidak perlukan file jQuery untuk WordPress kerana WordPress sudah sediakan file ini, kita hanya perlu load menggunakan kod <strong>wp_enqueue_script(&#8216;jquery&#8217;)</strong> sahaja.</span></em></p>
<h2>Langkah 2</h2>
<p>Buka file <strong>myslideshow.php</strong>, dan kita akan mulakan dengan kod kod PHP plugin ini.</p>
<pre class="brush: php;">
&lt;?php
/*
Plugin Name: MySlideshow
Plugin URI: http://www.syahzul.com
Description: Slideshow plugin using jQuery &amp; Coin Slider
Version: 1.0
Author: Syahril Zulkefli
Author URI: http://www.syahzul.com
License: GPL2
*/</pre>
<p>Kod ini perlu ada bagi memastikan WP dapat detect plugin kita. Anda boleh tukar maklumat yang ada, tetapi pastikan keyword yang diperlukan tetap ada. Sila rujuk page ini untuk maklumat lanjut: <a href="http://codex.wordpress.org/Writing_a_Plugin">Writing a Plugin</a>.</p>
<pre class="brush: php;">
if ( is_admin() )
{
	add_action( 'admin_menu', 'myslideshow_plugin_menu' );
	add_action( 'admin_init', 'myslideshow_register_settings' );
}
else
{
	add_action( 'wp_head'	, 'myslideshow_scripts');
}
</pre>
<p>Pada bahagian ini, kita akan check jika kita berada di bahagian backend, kita akan <strong>add satu link </strong>pada menu <strong>Settings </strong>untuk plugin kita dan seterusnya <strong>register settings</strong> untuk slideshow kita di dalam database. Jika bukan di bahagian backend, kita akan masukkan kod kod javascript di dalam <strong>wp_head</strong>.</p>
<pre class="brush: php;">
function myslideshow_register_settings()
{
	register_setting( 'myslideshow-group', 'mys_slider_image_path' );
	register_setting( 'myslideshow-group', 'mys_slider_effect' );
	register_setting( 'myslideshow-group', 'mys_slider_width' );
	register_setting( 'myslideshow-group', 'mys_slider_height' );
	register_setting( 'myslideshow-group', 'mys_slider_spw' );
	register_setting( 'myslideshow-group', 'mys_slider_sph' );
	register_setting( 'myslideshow-group', 'mys_slider_image_delay' );
	register_setting( 'myslideshow-group', 'mys_slider_square_delay' );
	register_setting( 'myslideshow-group', 'mys_slider_navigation' );
	register_setting( 'myslideshow-group', 'mys_slider_navigation_opacity' );
	register_setting( 'myslideshow-group', 'mys_slider_pause_mouseover' );
}
</pre>
<p>Kita akan gunakan function ini untuk add option di dalam database WP kita. Semua value di atas itu akan kita gunakan ketika kita nak paparkan slideshow dan juga pada option page kita.</p>
<pre class="brush: php;">
function myslideshow_plugin_menu()
{
	add_options_page('MySlideshow Settings', 'MySlideshow', 'manage_options', 'myslideshow', 'myslideshow_plugin_options');
}
</pre>
<p>Function inilah yang akan create satu link untuk option page plugin kita.</p>
<pre class="brush: php;">
function myslideshow_plugin_options()
{
	if (!current_user_can('manage_options'))  {
		wp_die( __('You do not have sufficient permissions to access this page.') );
	}
	?&gt;
	&lt;div class=&quot;wrap&quot;&gt;
	&lt;div id=&quot;icon-options-general&quot; class=&quot;icon32&quot;&gt;&lt;br /&gt;&lt;/div&gt;
        &lt;h2&gt;&lt;?php echo __('MySlideshow Settings'); ?&gt;&lt;/h2&gt;
        &lt;div id=&quot;message&quot; class=&quot;updated fade&quot; style=&quot;display: none&quot;&gt;&lt;/div&gt;

        &lt;form method=&quot;post&quot; action=&quot;options.php&quot;&gt;

        	&lt;table class=&quot;form-table&quot;&gt;
        		&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Image Path&lt;/th&gt;
					&lt;td&gt;
						&lt;input type=&quot;text&quot; name=&quot;mys_slider_image_path&quot; class=&quot;regular-text&quot; value=&quot;&lt;?php echo get_option('mys_slider_image_path'); ?&gt;&quot; /&gt;
					    &lt;span class=&quot;description&quot;&gt;&lt;?php _e('Specify your image path here. Must be inside your &lt;strong&gt;wp-content&lt;/strong&gt; folder.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Slider Effect&lt;/th&gt;
					&lt;td&gt;
						&lt;select name=&quot;mys_slider_effect&quot; style=&quot;width: 120px;&quot;&gt;
							&lt;option value=&quot;random&quot;&lt;?php echo get_option('mys_slider_effect') == 'random' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;&lt;?php _e('Random'); ?&gt;&lt;/option&gt;
							&lt;option value=&quot;swirl&quot;&lt;?php echo get_option('mys_slider_effect') == 'swirl' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;&lt;?php _e('Swirl'); ?&gt;&lt;/option&gt;
							&lt;option value=&quot;rain&quot;&lt;?php echo get_option('mys_slider_effect') == 'rain' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;&lt;?php _e('Rain'); ?&gt;&lt;/option&gt;
							&lt;option value=&quot;straight&quot;&lt;?php echo get_option('mys_slider_effect') == 'straight' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;&lt;?php _e('Straight'); ?&gt;&lt;/option&gt;
						&lt;/select&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('Choose your preferred slide effect.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Slider Width&lt;/th&gt;
					&lt;td&gt;
						&lt;input type=&quot;text&quot; name=&quot;mys_slider_width&quot; class=&quot;regular-text&quot; style=&quot;width: 120px;&quot; value=&quot;&lt;?php echo get_option('mys_slider_width'); ?&gt;&quot; /&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('Enter your slider width (in pixels) here. Numbers only please.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Slider Height&lt;/th&gt;
					&lt;td&gt;
						&lt;input type=&quot;text&quot; name=&quot;mys_slider_height&quot; class=&quot;regular-text&quot; style=&quot;width: 120px;&quot; value=&quot;&lt;?php echo get_option('mys_slider_height'); ?&gt;&quot; /&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('Enter your slider height (in pixels) here. Numbers only please.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Square per Width&lt;/th&gt;
					&lt;td&gt;
						&lt;input type=&quot;text&quot; name=&quot;mys_slider_spw&quot; class=&quot;regular-text&quot; style=&quot;width: 120px;&quot; value=&quot;&lt;?php echo get_option('mys_slider_spw'); ?&gt;&quot; /&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('Be careful with Square per width because large numbers can cause transitions problems.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Square per Height&lt;/th&gt;
					&lt;td&gt;
						&lt;input type=&quot;text&quot; name=&quot;mys_slider_sph&quot; class=&quot;regular-text&quot; style=&quot;width: 120px;&quot; value=&quot;&lt;?php echo get_option('mys_slider_sph'); ?&gt;&quot; /&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('Be careful with Square per height because large numbers can cause transitions problems.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Delay Between Images&lt;/th&gt;
					&lt;td&gt;
						&lt;input type=&quot;text&quot; name=&quot;mys_slider_image_delay&quot; class=&quot;regular-text&quot; style=&quot;width: 120px;&quot; value=&quot;&lt;?php echo get_option('mys_slider_image_delay'); ?&gt;&quot; /&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('Enter delay between images, in miliseconds.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Delay Between Squares&lt;/th&gt;
					&lt;td&gt;
						&lt;input type=&quot;text&quot; name=&quot;mys_slider_square_delay&quot; class=&quot;regular-text&quot; style=&quot;width: 120px;&quot; value=&quot;&lt;?php echo get_option('mys_slider_square_delay'); ?&gt;&quot; /&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('Enter delay between squares, in miliseconds.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Show navigation?&lt;/th&gt;
					&lt;td&gt;
						&lt;select name=&quot;mys_slider_navigation&quot; style=&quot;width: 80px;&quot;&gt;
							&lt;option value=&quot;1&quot;&lt;?php echo get_option('mys_slider_navigation') === 1 ? 'selected=&quot;selected&quot;' : ''; ?&gt;&gt;&lt;?php _e('Yes'); ?&gt;&lt;/option&gt;
							&lt;option value=&quot;0&quot;&lt;?php echo get_option('mys_slider_navigation') === 0 ? 'selected=&quot;selected&quot;' : ''; ?&gt;&gt;&lt;?php _e('No'); ?&gt;&lt;/option&gt;
						&lt;/select&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('If you choose Yes, slide navigation, including Next and Prev button, will be shown.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Navigation opacity&lt;/th&gt;
					&lt;td&gt;
						&lt;select name=&quot;mys_slider_navigation_opacity&quot; style=&quot;width: 80px;&quot;&gt;
							&lt;option value=&quot;0.1&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.1' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.1&lt;/option&gt;
							&lt;option value=&quot;0.2&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.2' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.2&lt;/option&gt;
							&lt;option value=&quot;0.3&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.3' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.3&lt;/option&gt;
							&lt;option value=&quot;0.4&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.4' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.4&lt;/option&gt;
							&lt;option value=&quot;0.5&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.5' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.5&lt;/option&gt;
							&lt;option value=&quot;0.6&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.6' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.6&lt;/option&gt;
							&lt;option value=&quot;0.7&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.7' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.7&lt;/option&gt;
							&lt;option value=&quot;0.8&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.8' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.8&lt;/option&gt;
							&lt;option value=&quot;0.9&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '0.9' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;0.9&lt;/option&gt;
							&lt;option value=&quot;1.0&quot;&lt;?php echo get_option('mys_slider_navigation_opacity') == '1.0' ? ' selected=&quot;selected&quot;' : ''; ?&gt;&gt;1.0&lt;/option&gt;
						&lt;/select&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('Enter opacity value for navigation.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;

				&lt;tr valign=&quot;top&quot;&gt;
					&lt;th scope=&quot;row&quot;&gt;Pause on mouse over?&lt;/th&gt;
					&lt;td&gt;
						&lt;select name=&quot;mys_slider_pause_mouseover&quot; style=&quot;width: 80px;&quot;&gt;
							&lt;option value=&quot;1&quot;&lt;?php echo get_option('mys_slider_pause_mouseover') === 1 ? 'selected=&quot;selected&quot;' : ''; ?&gt;&gt;&lt;?php _e('Yes'); ?&gt;&lt;/option&gt;
							&lt;option value=&quot;0&quot;&lt;?php echo get_option('mys_slider_pause_mouseover') === 0 ? 'selected=&quot;selected&quot;' : ''; ?&gt;&gt;&lt;?php _e('No'); ?&gt;&lt;/option&gt;
						&lt;/select&gt;
						&lt;span class=&quot;description&quot;&gt;&lt;?php _e('If you choose Yes, slideshow will be stop when user hovering the mouse over the image.'); ?&gt;&lt;/span&gt;
					&lt;/td&gt;
				&lt;/tr&gt;
        	&lt;/table&gt;

        	&lt;?php settings_fields( 'myslideshow-group' ); ?&gt;

        	&lt;p class=&quot;submit&quot;&gt;
			&lt;input type=&quot;submit&quot; value=&quot;Save Changes&quot; class=&quot;button-primary&quot; name=&quot;Submit&quot;&gt;
		&lt;/p&gt;
        &lt;/form&gt;
    &lt;/div&gt;
    &lt;?php
}
</pre>
<p>Dan ini merupakan kod untuk option page pada backend WP kita. Lihat contoh option page pada gambar di bawah ini.</p>
<p><a href="http://www.syahzul.com/wp-content/uploads/2010/08/option_page.jpg"><img class="alignnone size-medium wp-image-643" title="Gambar Option Page untuk plugin" src="http://www.syahzul.com/wp-content/uploads/2010/08/option_page-300x155.jpg" alt="" width="300" height="155" /></a></p>
<pre class="brush: php;">
function myslideshow_init()
{
	/* Register our script. */
	wp_register_script('myslideshow_script', WP_PLUGIN_URL . '/myslideshow/coin-slider.min.js');

	/* Register our css. */
	wp_register_style('myslideshow_style', WP_PLUGIN_URL . '/myslideshow/coin-slider-styles.css');

	wp_enqueue_script('jquery');
	wp_enqueue_script('myslideshow_script', WP_PLUGIN_URL . '/myslideshow/coin-slider.min.js');
	wp_enqueue_style('myslideshow_style', WP_PLUGIN_URL . '/myslideshow/coin-slider-styles.css');
}
add_action('init', 'myslideshow_init');
</pre>
<p>Kod ini kita perlukan untuk load file Javascript dan CSS menggunakan function <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">wp_enqueue_script</a> dan <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_style">wp_enqueue_style</a> yang disediakan oleh WP.</p>
<pre class="brush: php;">
function myslideshow_scripts()
{
	$html  = '&lt;script type=&quot;text/javascript&quot;&gt;' . &quot;\n&quot;;
	$html .= 'jQuery(document).ready( function() {' . &quot;\n&quot;;
	$html .= '    jQuery(&quot;#myslideshow&quot;).coinslider({' . &quot;\n&quot;;
	$html .= '        width: ' . get_option('mys_slider_width') . &quot;, &quot;;
	$html .= '        height: ' . get_option('mys_slider_height') . &quot;, &quot;;
	$html .= '        spw: ' . get_option('mys_slider_spw') . &quot;, &quot;;
	$html .= '        sph: ' . get_option('mys_slider_sph') . &quot;, &quot;;
	$html .= '        delay: ' . get_option('mys_slider_image_delay') . &quot;, &quot;;
	$html .= '        sDelay: ' . get_option('mys_slider_square_delay') . &quot;, &quot;;
	$html .= '        opacity: ' . get_option('mys_slider_navigation_opacity') . &quot;, &quot;;
	$html .= '        effect: \'' . get_option('mys_slider_effect') . '\', '; // random, swirl, rain, straight
	$html .= '        navigation: ' . (get_option('mys_slider_navigation') == 1 ? 'true' : 'false') . ', ';
	$html .= '        links: false, ';
	$html .= '        hoverPause: ' . (get_option('mys_slider_pause_mouseover') == 1 ? 'true' : 'false') . &quot;\n&quot;;
	$html .= '    });' . &quot;\n&quot;;
	$html .= '});' . &quot;\n&quot;;
	$html .= '&lt;/script&gt;';
	echo $html;
}
</pre>
<p>Function yang akan dapatkan option value kita dari database dan kemudian generate kod kod javascript untuk slideshow nanti.</p>
<pre class="brush: php;">
function myslideshow_get_images()
{
	if ( !defined('DS') )
		define( 'DS', DIRECTORY_SEPARATOR );

	// get path from parameter
	$image_path = get_option('mys_slider_image_path');

	// add root into our path
	$abspath = WP_CONTENT_DIR . DS . $image_path . DS;

	// convert '/' to proper directory separator, just in case
	$abspath = str_replace( '/', DS, $abspath );

	// Run through the source folder
	$folder = opendir( $abspath );

	$images	= array();

	// loop the source
	while( $file = readdir( $folder ) )
	{
		// make sure the item is not a folder
	    if( !is_dir( $file ) )
		{
		    $parts = explode(&quot;.&quot;, $file);                    // pull apart the name and dissect by period

		    if (is_array($parts) &amp;&amp; count($parts) &gt; 1)
			{    // does the dissected array have more than one part

		        $extension = end($parts);        // set to we can see last file extension

		        if ($extension == 'jpg' OR $extension == 'JPG' OR $extension == 'png' OR $extension == 'PNG' OR $extension == 'gif' OR $extension == 'GIF')
		        {
		        	$images[] = WP_CONTENT_URL . '/' . $image_path . '/' . $file;
		        }
		    }
	    }
	}

	return $images;
}
</pre>
<p>Seterusnya, function ini akan dapatkan senarai image untuk slideshow dan add dalam array $images. Dalam function ini, kita akan check file extensions, dan hanya dapatkan file <strong>.jpg</strong>, <strong>.png</strong> dan <strong>.gif</strong> sahaja.</p>
<pre class="brush: php;">
function myslideshow_html()
{
?&gt;
	&lt;!-- MySlideshow --&gt;
	&lt;div id=&quot;myslideshow&quot;&gt;
		&lt;?php
		// get images to show
		$images = myslideshow_get_images();

		for ( $x = 0; $x &lt; count($images); $x++ ) {
		?&gt;
		&lt;img src=&quot;&lt;?php echo $images[$x]; ?&gt;&quot; /&gt;
		&lt;?php
		}
		?&gt;
	&lt;/div&gt;
	&lt;!-- MySlideshow --&gt;
&lt;?php
}
</pre>
<p>Dan ini merupakan function yang akan generate output untuk slideshow kita. Kita akan panggil function ini dari file theme kita nanti.</p>
<h2>Langkah 3</h2>
<p>Create satu folder di dalam <strong>wp-content</strong> dan namakan <strong>myslideshow</strong>. Kemudian, save 4 gambar berikut di dalam folder tersebut.</p>
<p><a href="http://www.syahzul.com/wp-content/uploads/2010/08/slide1.png"><img class="size-thumbnail wp-image-611 alignnone" title="slide1" src="http://www.syahzul.com/wp-content/uploads/2010/08/slide1-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.syahzul.com/wp-content/uploads/2010/08/slide2.png"><img class="size-thumbnail wp-image-612 alignnone" title="slide2" src="http://www.syahzul.com/wp-content/uploads/2010/08/slide2-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.syahzul.com/wp-content/uploads/2010/08/slide3.png"><img class="size-thumbnail wp-image-613 alignnone" title="slide3" src="http://www.syahzul.com/wp-content/uploads/2010/08/slide3-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.syahzul.com/wp-content/uploads/2010/08/slide4.png"><img class="size-thumbnail wp-image-614 alignnone" title="slide4" src="http://www.syahzul.com/wp-content/uploads/2010/08/slide4-150x150.png" alt="" width="150" height="150" /> </a></p>
<p>* Nota: Klik pada gambar untuk view fullsize.</p>
<h2>Langkah 4</h2>
<p>Masukkan kod ini <strong>myslideshow_html()</strong> di dalam file theme anda. Untuk contoh ini, saya gunakan theme twentyten, saya masukkan kod di bawah ini di dalam file index.php.</p>
<p><img class="alignnone size-full wp-image-642" title="Contoh kod di dalam file index.php, theme Twenty Ten" src="http://www.syahzul.com/wp-content/uploads/2010/08/twentyten_index_file.jpg" alt="" width="551" height="401" /></p>
<h2>Langkah 5</h2>
<p>Sekarang anda perlu configure plugin ini terlebih dahulu, bagi membolehkan WP save settings untuk slideshow ini.</p>
<h3>Penerangan Parameters</h3>
<ul>
<li><strong>Image Path</strong><br />
Lokasi imej yang kita nak gunakan. Pastikan ianya berada di dalam folder <strong>wp-content</strong>. Untuk tutorial ini, sila masukkan <strong>myslideshow</strong>.</li>
<li><strong>Slider effect</strong><br />
Ada 3 effects yang boleh kita gunakan; Swirl, Rain, Straight. Dan boleh combine semua, gunakan Random.</li>
<li><strong>Slider width</strong><br />
Lebar slideshow anda. Pastikan lebar imej juga sama bagi mendapatkan hasil yang memuaskan hati anda.</li>
<li><strong>Slider height</strong><br />
Tinggi slideshow anda. Pastikan tinggi imej juga sama bagi mendapatkan hasil yang memuaskan hati anda.</li>
<li><strong>Square per width</strong><br />
Jumlah kotak berdasarkan lebar, sila tengok demo untuk fahamkan.</li>
<li><strong>Square per height</strong><br />
Jumlah kotak berdasarkan tinggi, sila tengok demo untuk fahamkan.<br />
<strong> </strong></li>
<li><strong>Delay between images</strong><br />
Had masa antara setiap satu image. Dalam format miliseconds; 1000 miliseconds sama dengan 1 saat.</li>
<li><strong>Delay between squares</strong><br />
Had masa antara setiap satu kotak. Dalam format miliseconds; 1000 miliseconds sama dengan 1 saat.</li>
<li><strong>Show navigation</strong><br />
Perlu tunjukkan button Next dan Prev?</li>
<li><strong>Navigation opacity</strong><br />
Opacity untuk button Next dan Prev.</li>
<li><strong>Pause on mouse over</strong><br />
Slideshow berhenti bila user letak mouse atas slideshow tu.</li>
</ul>
<h2>Demo</h2>
<p><a href="http://www.syahzul.com/demo/wordpress/">http://www.syahzul.com/demo/wordpress/</a></p>
<h2>Download</h2>
<p>Kalau rasa buat tak menjadi tu, sila download dari sini, free. Boleh guna pada mana mana website jika sudi.</p>
<p><a href="http://bit.ly/cAQLwx">http://bit.ly/cAQLwx</a></p>
<h2>Penutup</h2>
<p>Walaupun sebenarnya ini bukan macam tutorial sangat, tapi kalau rajin  kaji kod kod di atas tadi untuk belajar konsep plugin untuk WordPress. Dan ini merupakan kali pertama saya cuba bina pluginuntuk WordPress, jadi komen dan feedback amatlah dihargai.</p>
<h3>Nota lagi:</h3>
<p>Gambar tu untuk tujuan pembelajaran sahaja, sila jangan gunakan untuk tujuan lain.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/tutorial/2010/08/tutorial-bina-slideshow-plugin-untuk-wordpress-3-0-x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tutorial: Bina Module Slideshow untuk Joomla! 1.5.x</title>
		<link>http://www.syahzul.com/joomla/2010/08/tutorial-bina-module-slideshow-untuk-joomla-1-5-x/</link>
		<comments>http://www.syahzul.com/joomla/2010/08/tutorial-bina-module-slideshow-untuk-joomla-1-5-x/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 07:22:37 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[slideshow]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=597</guid>
		<description><![CDATA[Nota: Tedapat tutorial yang sama tetapi untuk WordPress plugin di sini: Tutorial: Bina Slideshow Plugin Untuk WordPress 3.0.x. Kebanyakan laman web sekarang mempunyai image slideshow pada laman utama. Ianya sudah boleh dikatakan satu benda yang wajib ada, bergantung kepada jenis ... ]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-666 post-image" title="Tutorial Bina Module Slideshow untuk Joomla! 1.5.x" src="http://www.syahzul.com/wp-content/uploads/2010/08/myslideshow_joomla.jpg" alt="" width="690" height="300" /></p>
<p><strong><em>Nota:</em></strong></p>
<p><em>Tedapat tutorial yang sama tetapi untuk WordPress plugin di sini: </em><a title="Permanent Link: Tutorial: Bina Slideshow Plugin Untuk WordPress 3.0.x" rel="bookmark" href="http://www.syahzul.com/tutorial/2010/08/tutorial-bina-slideshow-plugin-untuk-wordpress-3-0-x/"><em>Tutorial: Bina Slideshow Plugin Untuk WordPress 3.0.x</em></a><em>.</em></p>
<p>Kebanyakan laman web sekarang mempunyai image slideshow pada laman utama. Ianya sudah boleh dikatakan satu benda yang wajib ada, bergantung kepada jenis laman web itu sendiri. Tapi jika kita perhatikan, memang kebanyakan pemilik laman web suka dengan slideshow di laman web mereka. Lagi banyak animation, lagi mereka suka. Dan kalau boleh semua diorang nak animate <img src='http://www.syahzul.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>Jika kita search <a href="http://extensions.joomla.org">Joomla! Extensions Directory</a>, terdapat banyak <a href="http://extensions.joomla.org/search?q=coin&amp;q=slideshow" target="_blank">module slideshow</a> yang ada di sana, Commercial atau Non-commercial. Tapi, pernahkah anda terfikir untuk cuba menghasilkannya sendiri? Kali ini saya ingin menunjukkan cara cara menghasilkan module slideshow untuk Joomla! 1.5.x yang menggunakan <a href="http://jquery.com" target="_blank">jQuery</a> dan juga <a href="http://workshop.rs/projects/coin-slider/" target="_blank">Coin Slider</a>. Slideshow ini akan menggunakan semua imej yang terdapat di dalam folder yang kita akan tetapkan nanti.</p>
<p><span id="more-597"></span></p>
<h2>Keperluan</h2>
<p><a href="http://www.joomla.org/download.html">Joomla! 1.5.x (terkini)</a></p>
<p>Code Editor (saya guna <a href="http://www.pspad.com/">PSPad</a>, percuma)</p>
<p><a href="http://jquery.com">jQuery 1.4.x</a> (terkini)</p>
<p><a href="http://workshop.rs/projects/coin-slider/">Coin Slider</a> for jQuery</p>
<h2>Langkah 1</h2>
<p>Sekarang, pada mana mana bahagian di dalam komputer anda, cipta satu folder dan namakan <strong>mod_myslideshow</strong>. Kemudian, <img class="alignright size-full wp-image-609" title="Gambar contoh folder dan file yang diperlukan" src="http://www.syahzul.com/wp-content/uploads/2010/08/folders_n_files2.png" alt="" width="226" height="233" />create 3 file seperti di bawah ini, dan biarkan ianya kosong terlebih dahulu.</p>
<ol>
<li><strong>mod_myslideshow.php</strong></li>
<li><strong>mod_myslideshow.xml</strong></li>
<li><strong>helper.php<br />
</strong></li>
</ol>
<p>Di dalam folder <strong>myslideshow</strong>, create 3 folder seperti di bawah:</p>
<ol>
<li><strong>css</strong></li>
<li><strong>js</strong></li>
<li><strong>tmpl</strong></li>
</ol>
<p>Seterusnya, create satu file baru, <strong>default.php</strong> di dalam folder <strong>tmpl</strong>. Biarkan ia kosong.  Lihat gambar di sebelah sebagai rujukan.</p>
<p>Download file <strong><a href="http://code.jquery.com/jquery-1.4.2.min.js">jQuery</a></strong> dan masukkan di dalam folder <strong>js</strong>. Pada fail <a href="http://coin-slider.googlecode.com/files/coin-slider.zip"><strong>coin-slider.zip</strong></a> yang anda download tadi, extract dengan apa apa software zip. Di dalamnya terdapat 3 files. Copy file berikut sahaja</p>
<ol>
<li><strong>coin-slider-styles.css</strong> ke dalam folder <strong>css</strong></li>
<li><strong>coin-slider.min.js</strong> ke dalam folder <strong>js</strong></li>
</ol>
<h2>Langkah 2</h2>
<p>Kita mulakan dengan file metadata untuk module ini terlebih dahulu. Buka file <strong>mod_myslideshow.xml</strong> dan ikut turutan langkah di bawah ini.</p>
<pre class="brush: xml;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;install type=&quot;module&quot; version=&quot;1.5.0&quot; method=&quot;upgrade&quot;&gt;</pre>
<p>Kod bagi module Joomla! 1.5. Perlu ada.</p>
<pre class="brush: xml;">
	&lt;name&gt;MySlideshow&lt;/name&gt;
	&lt;author&gt;Syahril Zulkefli&lt;/author&gt;
	&lt;creationDate&gt;Aug 2010&lt;/creationDate&gt;
	&lt;copyright&gt;Copyright (C) 2005 - 2010 Syahril Zulkefli. All rights reserved.&lt;/copyright&gt;
	&lt;license&gt;http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL&lt;/license&gt;
	&lt;authorEmail&gt;syah@syahzul.com&lt;/authorEmail&gt;
 	&lt;authorUrl&gt;www.syahzul.com&lt;/authorUrl&gt;
 	&lt;version&gt;1.0.0&lt;/version&gt;
 	&lt;description&gt;Module MySlideshow, original jQuery plugin by http://workshop.rs, ported to Joomla! module by Syahril Zulkefli a.k.a. syahzul.&lt;/description&gt;</pre>
<p>Kod ini pula lebih kepada maklumat developer. Boleh tukar dengan maklumat anda sendiri, jangan malu malu ye <img src='http://www.syahzul.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<pre class="brush: xml;">
	&lt;files&gt;
		&lt;filename module=&quot;mod_myslideshow&quot;&gt;mod_myslideshow.php&lt;/filename&gt;
		&lt;filename&gt;helper.php&lt;/filename&gt;
		&lt;folder&gt;css&lt;/folder&gt;
		&lt;folder&gt;js&lt;/folder&gt;
		&lt;folder&gt;tmpl&lt;/folder&gt;
	&lt;/files&gt;</pre>
<p>Bahagian ini pula menerangkan apa files atau folders yang terdapat di dalam module kita. Tak perlu tukar apa apa di sini.</p>
<pre class="brush: xml;">
	&lt;params&gt;
		&lt;param name=&quot;path&quot; type=&quot;text&quot; size=&quot;60&quot; default=&quot;images/stories/myslideshow&quot; label=&quot;Image Path&quot; description=&quot;Specify your image path here. Must be inside your Joomla! folder.&quot; /&gt;
		&lt;param name=&quot;@spacer&quot; type=&quot;spacer&quot; default=&quot;&quot; label=&quot;&quot; description=&quot;&quot; /&gt;
		&lt;param name=&quot;slideEfx&quot; type=&quot;list&quot; default=&quot;random&quot; label=&quot;Slider effect&quot; description=&quot;Choose your preferred slide effect&quot;&gt;
			&lt;option value=&quot;random&quot;&gt;Random&lt;/option&gt;
			&lt;option value=&quot;swirl&quot;&gt;Swirl&lt;/option&gt;
			&lt;option value=&quot;rain&quot;&gt;Rain&lt;/option&gt;
			&lt;option value=&quot;straight&quot;&gt;Straight&lt;/option&gt;
		&lt;/param&gt;
		&lt;param name=&quot;slideWidth&quot; type=&quot;text&quot; default=&quot;600&quot; label=&quot;Slider width&quot; description=&quot;Enter your slider width (in pixels) here. Numbers only please.&quot; /&gt;
		&lt;param name=&quot;slideHeight&quot; type=&quot;text&quot; default=&quot;300&quot; label=&quot;Slider height&quot; description=&quot;Enter your slider height (in pixels) here. Numbers only please.&quot; /&gt;
		&lt;param name=&quot;slideSpw&quot; type=&quot;text&quot; default=&quot;7&quot; label=&quot;Square per width&quot; description=&quot;Be careful with Square per width because large numbers can cause transitions problems.&quot; /&gt;
		&lt;param name=&quot;slideSph&quot; type=&quot;text&quot; default=&quot;5&quot; label=&quot;Square per height&quot; description=&quot;Be careful with Square per height because large numbers can cause transitions problems.&quot; /&gt;
		&lt;param name=&quot;slideDelay&quot; type=&quot;text&quot; default=&quot;3000&quot; label=&quot;Delay between images&quot; description=&quot;Enter delay between images, in miliseconds.&quot; /&gt;
		&lt;param name=&quot;slideSDelay&quot; type=&quot;text&quot; default=&quot;30&quot; label=&quot;Delay between squares&quot; description=&quot;Enter delay between squares, in miliseconds.&quot; /&gt;
		&lt;param name=&quot;slideNavigation&quot; type=&quot;radio&quot; default=&quot;1&quot; label=&quot;Show navigation?&quot; description=&quot;If you choose Yes, slide navigation, including Next and Prev button, will be shown.&quot;&gt;
			&lt;option value=&quot;1&quot;&gt;Yes&lt;/option&gt;
			&lt;option value=&quot;0&quot;&gt;No&lt;/option&gt;
		&lt;/param&gt;
		&lt;param name=&quot;slideOpacity&quot; type=&quot;list&quot; default=&quot;0.7&quot; label=&quot;Navigation opacity&quot; description=&quot;Enter opacity value for navigation.&quot;&gt;
			&lt;option value=&quot;0.1&quot;&gt;0.1&lt;/option&gt;
			&lt;option value=&quot;0.2&quot;&gt;0.2&lt;/option&gt;
			&lt;option value=&quot;0.3&quot;&gt;0.3&lt;/option&gt;
			&lt;option value=&quot;0.4&quot;&gt;0.4&lt;/option&gt;
			&lt;option value=&quot;0.5&quot;&gt;0.5&lt;/option&gt;
			&lt;option value=&quot;0.6&quot;&gt;0.6&lt;/option&gt;
			&lt;option value=&quot;0.7&quot;&gt;0.7&lt;/option&gt;
			&lt;option value=&quot;0.8&quot;&gt;0.8&lt;/option&gt;
			&lt;option value=&quot;0.9&quot;&gt;0.9&lt;/option&gt;
			&lt;option value=&quot;1.0&quot;&gt;1.0&lt;/option&gt;
		&lt;/param&gt;
		&lt;param name=&quot;slidePauseHover&quot; type=&quot;radio&quot; default=&quot;1&quot; label=&quot;Pause on mouse over?&quot; description=&quot;If you choose Yes, slideshow will be stop when user hovering the mouse over the image.&quot;&gt;
			&lt;option value=&quot;1&quot;&gt;Yes&lt;/option&gt;
			&lt;option value=&quot;0&quot;&gt;No&lt;/option&gt;
		&lt;/param&gt;
		&lt;param name=&quot;@spacer&quot; type=&quot;spacer&quot; default=&quot;&quot; label=&quot;&quot; description=&quot;&quot; /&gt;
		&lt;param name=&quot;moduleclass_sfx&quot; type=&quot;text&quot; default=&quot;&quot; label=&quot;Module Class Suffix&quot; description=&quot;PARAMMODULECLASSSUFFIX&quot; /&gt;
	&lt;/params&gt;

	&lt;params group=&quot;advanced&quot;&gt;
		&lt;param name=&quot;cache&quot; type=&quot;list&quot; default=&quot;0&quot; label=&quot;Caching&quot; description=&quot;Select whether to cache the content of this module&quot;&gt;
			&lt;option value=&quot;1&quot;&gt;Use global&lt;/option&gt;
			&lt;option value=&quot;0&quot;&gt;No caching&lt;/option&gt;
		&lt;/param&gt;
		&lt;param name=&quot;cache_time&quot; type=&quot;text&quot; default=&quot;900&quot; label=&quot;Cache Time&quot; description=&quot;The time before the module is recached&quot; /&gt;
	&lt;/params&gt;</pre>
<p>Ini pula bahagian parameter untuk module kita. Di sini, jika anda perhatikan (atau baca kod itu) terdapat beberapa parameter yang kita perlukan, contohnya width, height, slideshow effects, delay dan lain lain. Sama juga, copy sahaja kod ini tanpa perlu ubah apa apa.</p>
<pre class="brush: xml;">&lt;/install&gt;</pre>
<p>Penutup untuk file ini. Dah siap, save file tersebut dan bersedia untuk kod PHP pula.</p>
<h2>Langkah 3</h2>
<p>Buka file <strong>mod_myslideshow.php</strong> dengan code editor, dan tambah kod kod di bawah ini.</p>
<pre class="brush: php;">&lt;?php
// no direct access
defined('_JEXEC') or die('Restricted access');

require_once( dirname( __FILE__ ) . DS . 'helper.php' );

$list = modMySlideshowHelper::getList( $params );

// check if any results returned
$items = count( $list );

if (!$items) {
	return;
}

require(JModuleHelper::getLayoutPath('mod_myslideshow'));</pre>
<h2>Langkah 4</h2>
<p>Buka file <strong>helper.php</strong> dengan code editor, dan tambah kod di bawah ini.</p>
<pre class="brush: php;">&lt;?php
// no direct access
defined('_JEXEC') or die('Restricted access');

class modMySlideshowHelper
{
	function getList(&amp;$params)
	{
		jimport('joomla.filesystem.folder');

		// load assets
		modMySlideshowHelper::addAssets( $params );

		// get path from parameter
		$path = $params-&gt;get('path');

		// split the folder into array
		$_path = explode('/', $path);

		// implode it into absolute path
		$abspath = implode( DS, $_path);

		// add root into our path
		$abspath = JPATH_ROOT . DS . $abspath . DS;

		// now, get all the image files inside these folder
		$files = JFolder::files($abspath, '\.jpg$|\.png$|\.gif$');

		// time to re-construct the url to the images
		for ( $x = 0; $x &lt; count( $files ); $x++ ) {
			$files[$x] = JURI::root() . $path . '/' . $files[$x];
		}
		return $files;
	}

	function addAssets(&amp;$params)
	{
		$document =&amp; JFactory::getDocument();

		// add CSS file
		$document-&gt;addStylesheet( JURI::root() . 'modules/mod_myslideshow/css/coin-slider-styles.css' );

		$js  = '&lt;script type=&quot;text/javascript&quot; src=&quot;' . JURI::root() . 'modules/mod_myslideshow/js/jquery-1.4.2.min.js&quot;&gt;&lt;/script&gt;';
		$js .= '&lt;script type=&quot;text/javascript&quot; src=&quot;' . JURI::root() . 'modules/mod_myslideshow/js/coin-slider.min.js&quot;&gt;&lt;/script&gt;';
		$js .= '&lt;script type=&quot;text/javascript&quot;&gt;' . &quot;\n&quot;;
		$js .= 'jQuery.noConflict();' . &quot;\n&quot;;
		$js .= 'jQuery(document).ready( function() {' . &quot;\n&quot;;
		$js .= '    jQuery(&quot;#mod_myslideshow&quot;).coinslider({' . &quot;\n&quot;;
		$js .= '        width: ' . $params-&gt;get('slideWidth') . &quot;, &quot;;
		$js .= '        height: ' . $params-&gt;get('slideHeight') . &quot;, &quot;;
		$js .= '        spw: ' . $params-&gt;get('slideSpw') . &quot;, &quot;;
		$js .= '        sph: ' . $params-&gt;get('slideSph') . &quot;, &quot;;
		$js .= '        delay: ' . $params-&gt;get('slideDelay') . &quot;, &quot;;
		$js .= '        sDelay: ' . $params-&gt;get('slideSDelay') . &quot;, &quot;;
		$js .= '        opacity: ' . $params-&gt;get('slideOpacity') . &quot;, &quot;;
		$js .= '        effect: \'' . $params-&gt;get('slideEfx') . '\', '; // random, swirl, rain, straight
		$js .= '        navigation: ' . ($params-&gt;get('slideNavigation') ? 'true' : 'false') . ', ';
		$js .= '        links: false, ';
		$js .= '        hoverPause: ' . ($params-&gt;get('slidePauseHover') ? 'true' : 'false') . &quot;\n&quot;;
		$js .= '    });' . &quot;\n&quot;;
		$js .= '});' . &quot;\n&quot;;
		$js .= '&lt;/script&gt;';

		$document-&gt;addCustomTag( $js );
	}
}</pre>
<h2>Langkah 5</h2>
<p>Buka file tmpl/default.php dan tambah kod di bawah ini.</p>
<pre class="brush: php;">
&lt;div id=&quot;mod_myslideshow&quot;&gt;
&lt;?php for ( $x = 0; $x &lt; $items; $x++ ) { ?&gt;
	&lt;img src=&quot;&lt;?php echo $list[$x]; ?&gt;&quot; /&gt;
&lt;?php } ?&gt;
&lt;/div&gt;</pre>
<h2>Langkah 6</h2>
<p>Sekarang, select semua files dan folders di dalam folder mod_myslideshow tadi, dan zipkannya.</p>
<p><img class="alignnone size-full wp-image-617" title="zip" src="http://www.syahzul.com/wp-content/uploads/2010/08/zip.png" alt="" width="551" height="227" /></p>
<p>Pastikan masa nak create zip file tu, pilih extension .zip, bukan .rar atau .7z. Dan gunakan file tersebut, contohnya <strong>mod_myslideshow.zip</strong> dan install pada mana mana Joomla!.</p>
<h2>Langkah 7</h2>
<p>Sekarang create satu folder baru di dalam folder images dan berikan nama <strong>myslideshow</strong>. Kemudian, save 4 gambar berikut di dalam folder tersebut.</p>
<p><a href="http://www.syahzul.com/wp-content/uploads/2010/08/slide1.png"><img class="size-thumbnail wp-image-611 alignnone" title="slide1" src="http://www.syahzul.com/wp-content/uploads/2010/08/slide1-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.syahzul.com/wp-content/uploads/2010/08/slide2.png"><img class="size-thumbnail wp-image-612 alignnone" title="slide2" src="http://www.syahzul.com/wp-content/uploads/2010/08/slide2-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.syahzul.com/wp-content/uploads/2010/08/slide3.png"><img class="size-thumbnail wp-image-613 alignnone" title="slide3" src="http://www.syahzul.com/wp-content/uploads/2010/08/slide3-150x150.png" alt="" width="150" height="150" /></a> <a href="http://www.syahzul.com/wp-content/uploads/2010/08/slide4.png"><img class="size-thumbnail wp-image-614 alignnone" title="slide4" src="http://www.syahzul.com/wp-content/uploads/2010/08/slide4-150x150.png" alt="" width="150" height="150" /> </a></p>
<p>* Nota: Klik pada gambar untuk view fullsize.</p>
<h2>Langkah 8</h2>
<p>Lepas dah install, boleh configure module tadi untuk kesesuaian website kita.</p>
<p><img class="alignnone size-full wp-image-622" title="Gambar parameter module" src="http://www.syahzul.com/wp-content/uploads/2010/08/parameters.png" alt="" width="472" height="363" /></p>
<h3>Penerangan Parameters</h3>
<ul>
<li><strong>Image Path</strong><br />
Lokasi imej yang kita nak gunakan. Pastikan ianya berada di dalam folder Joomla!.</li>
<li><strong>Slider effect</strong><br />
Ada 3 effects yang boleh kita gunakan; Swirl, Rain, Straight. Dan boleh combine semua, gunakan Random.</li>
<li><strong>Slider width</strong><br />
Lebar slideshow anda. Pastikan lebar imej juga sama bagi mendapatkan hasil yang memuaskan hati anda.</li>
<li><strong>Slider height</strong><br />
Tinggi slideshow anda. Pastikan tinggi imej juga sama bagi mendapatkan hasil yang memuaskan hati anda.</li>
<li><strong>Square per width</strong><br />
Jumlah kotak berdasarkan lebar, sila tengok demo untuk fahamkan.</li>
<li><strong>Square per height</strong><br />
Jumlah kotak berdasarkan tinggi, sila tengok demo untuk fahamkan.<br />
<strong></strong></li>
<li><strong>Delay between images</strong><br />
Had masa antara setiap satu image. Dalam format miliseconds; 1000 miliseconds sama dengan 1 saat.</li>
<li><strong>Delay between squares</strong><br />
Had masa antara setiap satu kotak. Dalam format miliseconds; 1000 miliseconds sama dengan 1 saat.</li>
<li><strong>Show navigation</strong><br />
Perlu tunjukkan button Next dan Prev?</li>
<li><strong>Navigation opacity</strong><br />
Opacity untuk button Next dan Prev.</li>
<li><strong>Pause on mouse over</strong><br />
Slideshow berhenti bila user letak mouse atas slideshow tu.</li>
</ul>
<h2>Demo</h2>
<p><a href="http://www.syahzul.com/demo/joomla/">http://www.syahzul.com/demo/joomla/</a></p>
<h2>Download</h2>
<p>Kalau rasa buat tak menjadi tu, sila download dari sini, free. Boleh guna pada mana mana website jika sudi.</p>
<p><a href="http://bit.ly/bH23Hl">http://bit.ly/bH23Hl</a></p>
<h2>Penutup</h2>
<p>Walaupun sebenarnya ini bukan macam tutorial sangat, tapi kalau rajin  kaji kod kod di atas tadi untuk belajar konsep MVC Joomla!. Mungkin nanti saya akan extend lagi, tambah title dengan description ke, tambah component untuknya ke, dan mungkin juga jadikan utk content, bukan setakat imej. Tapi buat masa ini, setakat ini sahaja. Feedback amatlah dihargai.</p>
<h3>Nota lagi:</h3>
<p>Gambar tu untuk tujuan pembelajaran sahaja, sila jangan gunakan untuk tujuan lain.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/joomla/2010/08/tutorial-bina-module-slideshow-untuk-joomla-1-5-x/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Gunakan Google Apps Pada Domain Anda</title>
		<link>http://www.syahzul.com/tutorial/2010/06/gunakan-google-apps-pada-domain-anda/</link>
		<comments>http://www.syahzul.com/tutorial/2010/06/gunakan-google-apps-pada-domain-anda/#comments</comments>
		<pubDate>Thu, 10 Jun 2010 17:46:41 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[aplikasi web]]></category>
		<category><![CDATA[cpanel]]></category>
		<category><![CDATA[directadmin]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[percuma]]></category>
		<category><![CDATA[web hosting]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=559</guid>
		<description><![CDATA[Jika anda mempunyai domain sendiri, sudah tentu anda juga mempunyai web hosting. Dan pada setiap web hosting kebiasaannya ada menawarkan email untuk domain anda. Tetapi tahukah anda bahawa ruangan untuk setiap email itu dalam lingkungan 2GB sahaja? Dan seandainya web ... ]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-669 post-image" title="Gunakan Google Apps Pada Domain Anda" src="http://www.syahzul.com/wp-content/uploads/2010/06/google_apps.jpg" alt="" width="690" height="300" /></p>
<p>Jika anda mempunyai domain sendiri, sudah tentu anda juga mempunyai web hosting. Dan pada setiap web hosting kebiasaannya ada menawarkan email untuk domain anda. Tetapi tahukah anda bahawa ruangan untuk setiap email itu dalam lingkungan 2GB sahaja? Dan seandainya web hosting anda down, anda tidak boleh access email anda tadi. Untuk sesuatu organisasi yang bergantung penuh kepada email, hal sebegini tidak boleh diterima sama sekali. Tapi, tahukah anda yang kita boleh gunakan Gmail untuk email kita dan boleh menggunakan domain kita sendiri?</p>
<p><span id="more-559"></span>Google menawarkan satu set aplikasi web yang mana boleh kita gunakan pada domain kita, secara <strong>percuma</strong>. Antara aplikasi yang boleh kita gunakan dan datang dalam satu pakej ialah <a href="http://www.google.com/apps/intl/en/business/gmail.html">Gmail</a>, <a href="http://www.google.com/apps/intl/en/business/calendar.html">Calendar</a>, <a href="http://www.google.com/apps/intl/en/business/docs.html">Docs</a> dan juga <a href="http://www.google.com/apps/intl/en/business/sites.html">Sites</a>. Ini bermakna, anda bukan sahaja boleh gunakan email tetapi juga aplikasi lain seperti <a href="http://www.google.com/apps/intl/en/business/docs.html">Google Docs</a> yang boleh menggantikan aplikasi Microsoft Office atapun Open Office. Dan ianya percuma!</p>
<p>Mari saya tunjukkan bagaimana caranya untuk anda gunakan perkhidmatan percuma dari Google ini pada domain anda.</p>
<h2>Keperluan</h2>
<ol>
<li>Domain name</li>
<li>FTP access ke web hosting anda</li>
<li>cPanel atau DirectAdmin pada web hosting anda</li>
</ol>
<h2>Langkah 1</h2>
<p><img class="alignnone size-full wp-image-562" title="Langkah 1" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_1.jpg" alt="" width="551" height="200" /></p>
<p>Masuk ke halaman web <a href="http://www.google.com/apps/intl/en/group/index.html">Google Apps Standard Edition</a> ini. Klik pada butang <strong>Get Started</strong>.</p>
<h2>Langkah 2</h2>
<p><img class="alignnone size-full wp-image-563" title="Langkah 2" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_2.jpg" alt="" width="551" height="300" /></p>
<p>Pilih <strong>Administrator: I own or control this domain</strong> daripada pilihan yang ada, kemudian masukkan nama domain anda dan tekan butang <strong>Get Started</strong>.</p>
<h2>Langkah 3</h2>
<p><img class="alignnone size-full wp-image-564" title="Langkah 3" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_3.jpg" alt="" width="551" height="300" /></p>
<p>Isikan maklumat yang diperlukan pada halaman seterusnya.</p>
<h2>Langkah 4</h2>
<p><img class="alignnone size-full wp-image-566" title="Langkah 4" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_4.jpg" alt="" width="551" height="300" /></p>
<p>Isikan maklumat akaun Administrator. Akaun ini merupakan akaun utama yang akan digunakan untuk menambah pengguna email anda nanti. Sebaiknya akaun ini adalah akaun yang akan anda gunakan nanti.</p>
<h2>Langkah 5</h2>
<p><img class="alignnone size-full wp-image-567" title="Langkah 5" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_5.jpg" alt="" width="551" height="300" /></p>
<p>Pilih kaedah untuk megesahkan domain anda. Untuk cara yang mudah, saya galakkan anda pilih <strong>Upload an HTML file to &#8230;</strong> untuk tujuan ini.</p>
<h2>Langkah 6</h2>
<p><img class="alignnone size-full wp-image-568" title="Langkah 6" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_6.jpg" alt="" width="551" height="300" /></p>
<p>Pada paparan seterusnya, Google akan memberikan anda satu kod unik untuk pengesahan domain anda. Buka Notepad atau Wordpad, salin kod yang diberikan itu dan save file tersebut sebagai <strong>googlehostedservice.html</strong>. Ketika hendak save file tersebut, pastikan anda pilih <strong>Save as type: All Files (*.*)</strong>. Jika sudah selesai, tekan butang <strong>I&#8217;ve completed the steps above</strong>.</p>
<h2>Langkah 7</h2>
<p><img class="alignnone size-full wp-image-572" title="Langkah 7" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_7.jpg" alt="" width="551" height="300" /></p>
<p>Gunakan FTP client yang sesuai seperti <strong>FileZilla </strong>untuk upload file tadi ke folder <strong>/public_html</strong> di web hosting anda. Sekarang, jika anda tengok Dashboard Google Apps anda, boleh dikatakan kesemua aplikasi masih belum aktif. Ini kerana Google mengambil masa sehingga 48 jam untuk untuk membuat pengesahan pada domain anda.Kita teruskan ke langkah seterusnya terlebih dahulu sementara menunggu Google menjalankan tugasnya.</p>
<p><img class="alignnone size-full wp-image-573" title="Not Active" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_8.jpg" alt="" width="551" height="300" /></p>
<h2>Langkah 8</h2>
<p>Untuk membolehkan semua email yang dihantar ke domain kita masuk ke Google Apps, kita perlu aktifkan aplikasi ini. Klik pada <strong>Activate  email</strong> pada Dashboard Google Apps kita. Google ada menerangkan cara bagaimana kita boleh tukar MX Records pada web hosting kita. Di sini saya sertakan dua cara di sini, satu untuk pengguna cPanel dan satu lagi untuk DirectAdmin.</p>
<table class="mx">
<tbody>
<tr>
<th>MX Server address</th>
<th>Priority</th>
</tr>
<tr>
<td>ASPMX.L.GOOGLE.COM.</td>
<td>10</td>
</tr>
<tr>
<td>ALT1.ASPMX.L.GOOGLE.COM.</td>
<td>20</td>
</tr>
<tr>
<td>ALT2.ASPMX.L.GOOGLE.COM.</td>
<td>20</td>
</tr>
<tr>
<td>ASPMX2.GOOGLEMAIL.COM.</td>
<td>30</td>
</tr>
<tr>
<td>ASPMX3.GOOGLEMAIL.COM.</td>
<td>30</td>
</tr>
<tr>
<td>ASPMX4.GOOGLEMAIL.COM.</td>
<td>30</td>
</tr>
<tr>
<td>ASPMX5.GOOGLEMAIL.COM.</td>
<td>30</td>
</tr>
</tbody>
</table>
<h3>cPanel</h3>
<p>Pada bahagian <strong>Mail</strong>, klik pada link <strong>MX Entry</strong>.</p>
<p><img class="alignnone size-full wp-image-581" title="cPanel MX Entry" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_8_cpanel.jpg" alt="" width="551" height="300" /></p>
<p>Delete semua record yg ada, dan kemudia tambah mengikut jadual di atas.</p>
<p><img class="alignnone size-full wp-image-582" title="cPanel MX Entries" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_8_cpanel_entries.jpg" alt="" width="551" height="300" /></p>
<h3>DirectAdmin</h3>
<p>Pada bahagian <strong>Email Management</strong>, klik di <strong>MX Records</strong>.</p>
<p><img class="alignnone size-full wp-image-578" title="MX Records" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_8_directadmin.jpg" alt="" width="551" height="300" /></p>
<p>Kemudian, padam semua record yang sedia ada, dan tambahkan record baru berdasarkan jadual di atas tadi. Tambah sebanyak yang mungkin.</p>
<p><img class="alignnone size-full wp-image-579" title="MX Records table" src="http://www.syahzul.com/wp-content/uploads/2010/06/step_8_directadmin_result.jpg" alt="" width="551" height="300" /></p>
<p>Setelah selesai, kembali pada Google akan memeriksa MX Records ini, dan ianya mengambil masa sehingga 48 jam untuk selesai. Buat masa ini anda hanya perlu tunggu proses pengesahan dari Google selesai. Kebiasaannya, tak sampai satu jam, tapi ada juga kalanya 48 jam pun belum selesai jugak. Bergantung kepada keadaan.</p>
<p>Dan jika anda ingin mengakses Google Apps anda, gunakan URL begini, <strong>http://www.google.com/a/nama_domain_anda</strong>. Untuk domain saya, saya gunakan URL http://www.google.com/a/syahzul.com, jadi anda hanya perlu tukarkan domain itu kepada domain anda sendiri.</p>
<p>Selamat mencuba!.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/tutorial/2010/06/gunakan-google-apps-pada-domain-anda/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cara memasang Facebook Connect di CakePHP</title>
		<link>http://www.syahzul.com/tutorial/2010/04/cara-memasang-facebook-connect-di-cakephp/</link>
		<comments>http://www.syahzul.com/tutorial/2010/04/cara-memasang-facebook-connect-di-cakephp/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 00:26:03 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[import database]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=486</guid>
		<description><![CDATA[Kebanyakan aplikasi web pada masa ini menawarkan kelebihan kepada pengguna untuk menggunakan akaun Facebook mereka untuk log masuk. Ada juga yang menawarkan lebih dari itu, seperti OpenID, Twiter dan lain lain lagi. Kelebihan utama fungsi sebegini ialah memudahkan pengguna mendaftar ... ]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-673 post-image" title="Cara memasang Facebook Connect di CakePHP" src="http://www.syahzul.com/wp-content/uploads/2010/04/fbconnect.jpg" alt="" width="690" height="300" /></p>
<p>Kebanyakan aplikasi web pada masa ini menawarkan kelebihan kepada pengguna untuk menggunakan akaun Facebook mereka untuk log masuk. Ada juga yang menawarkan lebih dari itu, seperti OpenID, Twiter dan lain lain lagi. Kelebihan utama fungsi sebegini ialah memudahkan pengguna mendaftar tanpa perlu mengisi form yang panjang berjela, hanya klik beberapa button, semua siap sedia digunakan.</p>
<p>Untuk project terbaru, saya cuba untuk integrate Facebook Connect di dalam aplikasi saya yang menggunakan <a href="http://bakery.cakephp.org/articles/view/release-cakephp-1-2-6">CakePHP 1.2.6</a> (terbaru pada waktu artikel ini di tulis). Pada mulanya memang agak susah untuk menjadi, tapi selepas 15 kali mencuba akhirnya berjaya juga. Dan saya ingin share cara caranya di sini, untuk tujuan rujukan sesama kita pada masa akan datang.<br />
<span id="more-486"></span></p>
<h2>Keperluan</h2>
<h3>Integrate Auth Component</h3>
<p>Anda perlu buat <a href="http://book.cakephp.org/view/641/Simple-Acl-controlled-Application">tutorial ini</a> terlebih dahulu sebelum boleh mula. Ini kerana kita memerlukan Auth component yang berjaya dipasang pada CakePHP kita. Jika anda belum buat, sila siapkan tutorial itu terlebih dahulu dan kemudian baru buat yang ini. Peratus untuk tutorial ini gagal jika tutorial tentang ACL itu tak disiapkan ialah <strong>100%</strong>. Tetapi untuk pro bakers, boleh abaikan.</p>
<h3>VirtualHost</h3>
<p>Untuk menggunakan Facebook Connect pada local server, kita tidak boleh menggunakan address <a href="http://localhost">http://localhost</a> ketika kita hendak cipta aplikasi Facebook baru. Oleh itu, apa yang kita boleh buat ialah menggunakan VirtualHost pada Apache dan kita buat satu dummy domain pada komputer kita. Untuk tujuan tutorial ini saya ingin gunakan domain <strong>fbconnect.com</strong>.</p>
<p>Buka fail <strong>X:\xampp\apache\conf\extra\httpd-vhosts.conf</strong> dengan code editor anda (saya gunakan PSPad) dan masukkan kod berikut:</p>
<pre class="brush: plain;">NameVirtualHost *:80

&lt;Virtualhost *:80&gt;
 ServerAdmin syahzul@gmail.com
 DocumentRoot &quot;X:/xampp/htdocs&quot;
 ServerName localhost
 &lt;directory &quot;X:/xampp/htdocs&quot;&gt;
 AllowOverride FileInfo AuthConfig Limit Indexes
 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
 &lt;limit GET POST OPTIONS&gt;
 Order allow,deny
 Allow from all
 &lt;/limit&gt;
 &lt;limitexcept GET POST OPTIONS&gt;
 Order deny,allow
 Deny from all
 &lt;/limitexcept&gt;
 &lt;/directory&gt;
&lt;/Virtualhost&gt;

&lt;Virtualhost *:80&gt;
 ServerAdmin syahzul@gmail.com
 DocumentRoot &quot;X:/xampp/htdocs/fbconnect&quot;
 ServerName fbconnect.com
 &lt;directory &quot;X:/xampp/htdocs/fbconnect&quot;&gt;
 AllowOverride FileInfo AuthConfig Limit Indexes
 Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
 &lt;limit GET POST OPTIONS&gt;
 Order allow,deny
 Allow from all
 &lt;/limit&gt;
 &lt;limitexcept GET POST OPTIONS&gt;
 Order deny,allow
 Deny from all
 &lt;/limitexcept&gt;
 &lt;/directory&gt;
&lt;/Virtualhost&gt;</pre>
<p>Kemudian, buka pula fail <strong>C:\Windows\system32\drivers\etc\hosts</strong> dengan code editor anda dan tambahkan kod berikut di dalamnya:</p>
<pre class="brush: plain;">127.0.0.1		fbconnect.com</pre>
<p>Dan restart Apache anda.</p>
<p><span style="color: #ff0000;"><em><strong>Nota: Sila tukarkan drive X: kepada drive di mana anda install xampp  anda.</strong></em></span></p>
<h2>Facebook Application Client’s File</h2>
<p>Muat turun files yang diperlukan dari sini: <a title="http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz" href="http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz">http://svn.facebook.com/svnroot/platform/clients/packages/facebook-platform.tar.gz</a>, extract semuanya dan masukkan di dalam <strong>X:\xampp\htdocs\fbconnect\vendors\facebook</strong>.</p>
<p><img class="alignnone size-full wp-image-515" title="vendors" src="http://www.syahzul.com/wp-content/uploads/2010/04/vendors.jpg" alt="" width="551" height="250" /></p>
<p>Kemudian, pada folder webroot, create satu file baru dan namakan <strong>xd_receiver.htm</strong> dan masukkan kod berikut:</p>
<pre class="brush: php;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;
	&lt;head&gt;
		&lt;title&gt;Cross-Domain Receiver Page&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;script src=&quot;http://static.ak.connect.facebook.com/js/api_lib/v0.4/XdCommReceiver.js?2&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<p><img class="alignnone size-full wp-image-503" title="xd_receiver" src="http://www.syahzul.com/wp-content/uploads/2010/04/xd_receiver.jpg" alt="" width="551" height="250" /></p>
<h2>Create Facebook Application</h2>
<p>Sekarang tiba masanya untuk kita create satu Facebook Apps baru di sini: <a href="http://www.facebook.com/developers/">http://www.facebook.com/developers/</a>.</p>
<h3>1. Set up application baru</h3>
<p><img class="alignnone size-full wp-image-488" title="Create new Application" src="http://www.syahzul.com/wp-content/uploads/2010/04/01_create.jpg" alt="" width="551" height="250" /></p>
<h3>2. Berikan nama yang sesuai</h3>
<p><img class="alignnone size-full wp-image-489" title="Give name to your application" src="http://www.syahzul.com/wp-content/uploads/2010/04/02_name.jpg" alt="" width="551" height="250" /></p>
<h3>3. Pada tab Basic, masukkan contact email untuk application anda</h3>
<p><img class="alignnone size-full wp-image-490" title="03_developer" src="http://www.syahzul.com/wp-content/uploads/2010/04/03_developer.jpg" alt="" width="551" height="250" /></p>
<h3>4. Pada tab Authentication, masukkan URL domain yang kita gunakan.</h3>
<p><a href="http://www.syahzul.com/wp-content/uploads/2010/04/04_auth.jpg"><img class="alignnone size-full wp-image-491" title="04_auth" src="http://www.syahzul.com/wp-content/uploads/2010/04/04_auth.jpg" alt="" width="551" height="250" /></a></p>
<h3>5. Pada tab Connect, masukkan URL (beserta trailing slash), base domain (domain tanpa http://) dan URL sekali lagi.</h3>
<p><img class="alignnone size-full wp-image-492" title="05_connect" src="http://www.syahzul.com/wp-content/uploads/2010/04/05_connect.jpg" alt="" width="551" height="250" /></p>
<h3>6. Simpan API Key dan Application Secret untuk kita gunakan kemudian.</h3>
<p><img class="alignnone size-full wp-image-493" title="06_done" src="http://www.syahzul.com/wp-content/uploads/2010/04/06_done.jpg" alt="" width="551" height="250" /></p>
<h2>Database</h2>
<p>Kita perlu tambahkan 2 fields baru pada table <strong>users </strong>kita.</p>
<pre class="brush: plain;">ALTER TABLE `users`
ADD `fbid` BIGINT( 20 ) NOT NULL DEFAULT '0' AFTER `password` ,
ADD `fbpassword` BIGINT( 20 ) NOT NULL AFTER `fbid`;</pre>
<h2>AppController.php</h2>
<p>Buka file AppController.php dan tambahkan kod berikut:</p>
<pre class="brush: php;">var $uses = array('User');
var $facebook;
var $__fbApiKey = '7d8e96e4ddf047b5611f5fcbaee04133';
var $__fbSecret = '56480e8655ceecaa36ad2e599bda3604';
</pre>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 295px; width: 1px; height: 1px; overflow: hidden;">
<pre>syahzul@gmail.com</pre>
</div>
<p>Dan tambah kod berikut di dalam file yang sama.</p>
<pre class="brush: php;">	function __construct() {
		parent::__construct();

		// Prevent the 'Undefined index: facebook_config' notice from being thrown.
		$GLOBALS['facebook_config']['debug'] = NULL;

		// Create a Facebook client API object.
		$this-&gt;facebook = new Facebook($this-&gt;__fbApiKey, $this-&gt;__fbSecret);
	}</pre>
<p>Seterusnya, tambah kod ini di dalam method beforeFilter() di dalam file yang sama.</p>
<pre class="brush: php;">//check to see if user is signed in with facebook
$this-&gt;__checkFBStatus();

//send all user info to the view
$this-&gt;set('user', $this-&gt;Auth-&gt;user());</pre>
<p>Dan kod seterusnya:</p>
<pre class="brush: php;">    private function __checkFBStatus(){

        //check to see if a user is not logged in, but a facebook user_id is set
        if ( !$this-&gt;Auth-&gt;User() &amp;&amp; $this-&gt;facebook-&gt;get_loggedin_user() ) {

            //see if this facebook id is in the User database; if not, create the user using their fbid hashed as their password
            $user_record =
                $this-&gt;User-&gt;find('first', array(
                    'conditions' =&gt; array('fbid' =&gt; $this-&gt;facebook-&gt;get_loggedin_user()),
                    'fields' =&gt; array('User.fbid', 'User.fbpassword', 'User.password'),
                    'contain' =&gt; array()
                ));

            //create new user
            if(empty($user_record)):
                $user_record['fbid'] = $this-&gt;facebook-&gt;get_loggedin_user();
                $user_record['fbpassword'] = $this-&gt;__randomString();
                $user_record['group_id'] = 3; // we have to set group_id manually here, put the lowest level
                $user_record['password'] = $this-&gt;Auth-&gt;password($user_record['fbpassword']);
                $this-&gt;User-&gt;create();
                $this-&gt;User-&gt;save($user_record);
            endif;

            //change the Auth fields
            $this-&gt;Auth-&gt;fields = array('username' =&gt; 'fbid', 'password' =&gt; 'password');

            //log in the user with facebook credentials
            $this-&gt;Auth-&gt;login($user_record);

        }

        // if user is logged in, and fb also logged in
        elseif ( $this-&gt;Auth-&gt;User() &amp;&amp; $this-&gt;facebook-&gt;get_loggedin_user() ) {

        	$user_record = $this-&gt;User-&gt;find('first', array('conditions' =&gt; array('User.id' =&gt; $this-&gt;Auth-&gt;User('id'))));

            //create new user
            if(empty($user_record)):
            	$user_record['id']			= $user['User']['id'];
                $user_record['fbid'] 		= $this-&gt;facebook-&gt;get_loggedin_user();
                $user_record['fbpassword'] 	= $this-&gt;__randomString();
                $user_record['group_id'] 	= $user['User']['group_id'];
                $this-&gt;User-&gt;save($user_record);
            endif;
        }
    }

    private function __randomString($minlength = 20, $maxlength = 20, $useupper = true, $usespecial = false, $usenumbers = true){
        $charset = &quot;abcdefghijklmnopqrstuvwxyz&quot;;
        if ($useupper) $charset .= &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;
        if ($usenumbers) $charset .= &quot;0123456789&quot;;
        if ($usespecial) $charset .= &quot;~@#$%^*()_+-={}|][&quot;;
        if ($minlength &gt; $maxlength) $length = mt_rand ($maxlength, $minlength);
        else $length = mt_rand ($minlength, $maxlength);
        $key = '';
        for ($i=0; $i&lt;$length; $i++){
            $key .= $charset[(mt_rand(0,(strlen($charset)-1)))];
        }
        return $key;
    }</pre>
<p>Ini merupakan hasil akhir yang ada pada file <strong>AppController.php</strong> saya.</p>
<pre class="brush: php;">&lt;?php

App::import('Vendor', 'facebook/facebook');

class AppController extends Controller {

    var $components = array('Acl', 'Auth');
    var $uses = array('User');

    var $facebook;
    var $__fbApiKey = '7d8e96e4ddf047b5611f5fcbaee04133';
    var $__fbSecret = '56480e8655ceecaa36ad2e599bda3604';

	function __construct() {
		parent::__construct();

		// Prevent the 'Undefined index: facebook_config' notice from being thrown.
		$GLOBALS['facebook_config']['debug'] = NULL;

		// Create a Facebook client API object.
		$this-&gt;facebook = new Facebook($this-&gt;__fbApiKey, $this-&gt;__fbSecret);
	}

    function beforeFilter() {
        // Configure AuthComponent
        $this-&gt;Auth-&gt;authorize = 'actions';
        $this-&gt;Auth-&gt;loginAction = array('controller' =&gt; 'users', 'action' =&gt; 'login');
        $this-&gt;Auth-&gt;logoutRedirect = array('controller' =&gt; 'users', 'action' =&gt; 'login');
        $this-&gt;Auth-&gt;loginRedirect = array('controller' =&gt; 'pages', 'action' =&gt; 'display');

	    // check to see if user is signed in with facebook
	    $this-&gt;__checkFBStatus();

	    // send all user info to the view
	    $this-&gt;set('user', $this-&gt;Auth-&gt;user());

        $this-&gt;Auth-&gt;allowedActions = array('display');
    }

    private function __checkFBStatus(){

        //check to see if a user is not logged in, but a facebook user_id is set
        if ( !$this-&gt;Auth-&gt;User() &amp;&amp; $this-&gt;facebook-&gt;get_loggedin_user() ) {

            //see if this facebook id is in the User database; if not, create the user using their fbid hashed as their password
            $user_record =
                $this-&gt;User-&gt;find('first', array(
                    'conditions' =&gt; array('fbid' =&gt; $this-&gt;facebook-&gt;get_loggedin_user()),
                    'fields' =&gt; array('User.fbid', 'User.fbpassword', 'User.password'),
                    'contain' =&gt; array()
                ));

            //create new user
            if(empty($user_record)):
                $user_record['fbid'] = $this-&gt;facebook-&gt;get_loggedin_user();
                $user_record['fbpassword'] = $this-&gt;__randomString();
                $user_record['group_id'] = 3; // we have to set group_id manually here, put the lowest level
                $user_record['password'] = $this-&gt;Auth-&gt;password($user_record['fbpassword']);
                $this-&gt;User-&gt;create();
                $this-&gt;User-&gt;save($user_record);
            endif;

            //change the Auth fields
            $this-&gt;Auth-&gt;fields = array('username' =&gt; 'fbid', 'password' =&gt; 'password');

            //log in the user with facebook credentials
            $this-&gt;Auth-&gt;login($user_record);

        }

        // if user is logged in, and fb also logged in
        elseif ( $this-&gt;Auth-&gt;User() &amp;&amp; $this-&gt;facebook-&gt;get_loggedin_user() ) {

        	$user_record = $this-&gt;User-&gt;find('first', array('conditions' =&gt; array('User.id' =&gt; $this-&gt;Auth-&gt;User('id'))));

            //create new user
            if(empty($user_record)):
            	$user_record['id']			= $user['User']['id'];
                $user_record['fbid'] 		= $this-&gt;facebook-&gt;get_loggedin_user();
                $user_record['fbpassword'] 	= $this-&gt;__randomString();
                $user_record['group_id'] 	= $user['User']['group_id'];
                $this-&gt;User-&gt;save($user_record);
            endif;
        }
    }

    private function __randomString($minlength = 20, $maxlength = 20, $useupper = true, $usespecial = false, $usenumbers = true){
        $charset = &quot;abcdefghijklmnopqrstuvwxyz&quot;;
        if ($useupper) $charset .= &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;;
        if ($usenumbers) $charset .= &quot;0123456789&quot;;
        if ($usespecial) $charset .= &quot;~@#$%^*()_+-={}|][&quot;;
        if ($minlength &gt; $maxlength) $length = mt_rand ($maxlength, $minlength);
        else $length = mt_rand ($minlength, $maxlength);
        $key = '';
        for ($i=0; $i&lt;$length; $i++){
            $key .= $charset[(mt_rand(0,(strlen($charset)-1)))];
        }
        return $key;
    }
}
?&gt;</pre>
<h2>Default.ctp</h2>
<p>File seterusnya yang kita perlu edit ialah <strong>D:\xampp\htdocs\fbconnect\views\layouts\default.ctp</strong>. Cari kod</p>
<pre class="brush: php;">&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;</pre>
<p>dan gantikan dengan</p>
<pre class="brush: php;">&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xmlns:fb=&quot;http://www.facebook.com/2008/fbml&quot;&gt;</pre>
<p>Dan tambahkan kod di bawah ini di bahagian &lt;head&gt;</p>
<pre class="brush: php;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot;&gt;
	FB.init(&quot;7d8e96e4ddf047b5611f5fcbaee04133&quot;,&quot;&lt;?php echo FULL_BASE_URL; ?&gt;/xd_receiver.htm&quot;);

	function logout()
	{
		FB.Connect.logout( function() {
			window.location = '&lt;?php echo FULL_BASE_URL; ?&gt;/users/logout';
		});
		return false;
	}
	&lt;/script&gt;</pre>
<p><strong>Nota: Jangan lupa tukarkan API Key anda!</strong></p>
<p>Sekarang kita perlukan kod untuk button Facebook Connect, masukkan kod dibawah ini pada mana mana view yang sesuai. Saya gunakan file default.ctp yang sama untuk memudahkan pembelajaran.</p>
<pre class="brush: php;">			&lt;?php
			    if(empty($user)):

					echo $form-&gt;create('User', array('action' =&gt; 'login'));
					echo $form-&gt;inputs(array(
						'legend' =&gt; __('Login', true),
						'username',
						'password'
					));
					echo $form-&gt;end('Login');
					echo '&lt;fb:login-button onlogin=&quot;window.location.reload();&quot;&gt;&lt;/fb:login-button&gt;';

				else:
					echo $user['User']['name'] . '&lt;br /&gt;';
					echo $html-&gt;link('Logout', '#', array('onclick' =&gt; 'logout();'));
					if($user['User']['fbid'] == 0) :
						echo '&lt;fb:login-button onlogin=&quot;window.location.reload();&quot;&gt;&lt;/fb:login-button&gt;';
					endif;
				endif;
			?&gt;</pre>
<p>Sekarang kita boleh test Facebook Connect kita. Katakan kita dah ada satu user dalam database, kemudian dia login, dia masih nampak button Facebook Connect dan boleh gunakan fungsi tersebut. Dan kita akan add Facebook ID dia lepas connect. Jadi kita bukan saja boleh add new user, tapi boleh integrate existing user yang ada.</p>
<h2>Download Sample Code</h2>
<p>Boleh download di sini: <a href="http://bit.ly/aeuwSy">http://bit.ly/aeuwSy</a></p>
<h2>Isu Yang Dikenalpasti</h2>
<p>Lepas user yang dah login tu Connect, button FB Connect tetap wujud. Kena refresh page baru dia hilang. Boleh buang guna javascript, tapi tak disertakan di sini, minta maaf.</p>
<h2>Kredit</h2>
<p>Artikel asal yang menunjukkan cara menggunakan Facebook Connect oleh <a href="http://cutfromthenorth.com">CutFromTheNorth.com</a>. Pautan untuk article asal <a href="http://cutfromthenorth.com/integrating-facebook-connect-with-cakephps-auth-component/">di sini</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/tutorial/2010/04/cara-memasang-facebook-connect-di-cakephp/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Import Database MySQL dengan BigDump</title>
		<link>http://www.syahzul.com/tutorial/2010/02/import-database-mysql-dengan-bigdump/</link>
		<comments>http://www.syahzul.com/tutorial/2010/02/import-database-mysql-dengan-bigdump/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 20:42:26 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[import database]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=424</guid>
		<description><![CDATA[Jika anda mempunyai website ataupun forum yang mempunyai banyak post, saiz database anda pastinya amat besar. Sebagai contoh, untuk portal Joomla-My.org, saiz database sudah mencecah 150MB! Dan adalah menjadi masalah apabila kami ingin import database ini ke web server kami ... ]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-677 post-image" title="Import Database MySQL dengan BigDump" src="http://www.syahzul.com/wp-content/uploads/2010/02/bigdump.jpg" alt="" width="690" height="300" /></p>
<p>Jika anda mempunyai website ataupun forum yang mempunyai banyak post, saiz database anda pastinya amat besar. Sebagai contoh, untuk portal Joomla-My.org, saiz database sudah mencecah 150MB! Dan adalah menjadi masalah apabila kami ingin import database ini ke web server kami kerana saiz maksimum untuk upload file biasanya dalam 16MB hingga 128MB sahaja, bergantung kepada web hoster. Antara error yang biasanya kami dapat ialah:</p>
<blockquote><p>You probably tried to upload too large file. Please refer to <a href="http://localhost/phpmyadmin/Documentation.html#faq1_16" target="_blank">documentation</a> for ways to workaround this limit.</p></blockquote>
<p>Berbagai cara yang kami cuba lakukan, antaranya ialah membahagikan database itu kepada beberapa bahagian yang lebih kecil, contohnya satu bahagian hanya ada beberapa tables sahaja. Tapi table untuk post sahaja mencecah 72MB! Itu belum masuk lagi table untuk users.</p>
<p>Setelah merujuk pada documentation yang diberikan, kami mencuba <a href="http://www.ozerov.de/bigdump.php">BigDump</a>, satu script PHP yang dicipta oleh <a href="http://www.ozerov.de/bigdump.php">Alexey Ozerov</a>. Ternyata script ini banyak membantu. Mari kita tengok cara cara menggunakannya.</p>
<p><span id="more-424"></span></p>
<h2>Langkah 1</h2>
<p>Download script ini dari halaman web <a href="http://www.ozerov.de/bigdump.php">Big Dump</a> dan kemudian extract file zip tersebut menggunakan <a href="http://www.winzip.com/">Winzip</a> atau <a href="http://www.7-zip.org/">7zip</a> atau <a href="http://www.rarlab.com/">Winrar</a>, terpulang pada anda.</p>
<h2>Langkah 2</h2>
<p>Ubahsuai kod di bawah ini, mengikut maklumat MySQL database pada server anda</p>
<pre class="brush: php;">// Database configuration
$db_server   = 'localhost';        // biarkan localhost
$db_name     = '';                // nama database yang ingin anda gunakan
$db_username = '';                // username untuk mysql
$db_password = '';                // password untuk mysql</pre>
<p>Itu sahaja yang perlu anda tukar.</p>
<h2>Langkah 3</h2>
<p>Dengan menggunakan mana mana FTP client yang sesuai, upload script tadi ke web server anda. Untuk hasil yang lebih baik, cipta satu folder baru di dalam <strong>/public_html/</strong> anda. Kami gunakan nama folder <strong>dump</strong>, dan set permission (CHMOD) kepada <strong>777</strong>.</p>
<p><img class="alignnone size-full wp-image-430" title="set_permission_777" src="http://www.syahzul.com/wp-content/uploads/2010/02/set_permission_777.jpg" alt="" width="551" height="200" /></p>
<h2>Langkah 4</h2>
<p>Upload file database yang ingin digunakan, sama ada format <strong>.sql</strong> ataupun <strong>.gz</strong> di dalam folder yang sama.</p>
<p><img class="alignnone size-full wp-image-429" title="upload_to_folder" src="http://www.syahzul.com/wp-content/uploads/2010/02/upload_to_folder.jpg" alt="" width="551" height="200" /></p>
<h2>Langkah 5</h2>
<p>Run script <strong>bigdump.php</strong> itu pada web browser anda, contohnya: <strong>http://www.joomla-my.org/dump/bigdump.php</strong>. Pada paparan seterusnya, anda akan mendapati fail database tadi berada di dalam senarai.</p>
<p><img class="alignnone size-full wp-image-428" title="in_list" src="http://www.syahzul.com/wp-content/uploads/2010/02/in_list.jpg" alt="" width="551" height="200" /></p>
<h2>Langkah 6</h2>
<p>Sekarang, untuk mulakan proses import database yang besar itu, klik pada link <strong>Start  Import</strong>.</p>
<p><img class="alignnone size-full wp-image-427" title="start_import" src="http://www.syahzul.com/wp-content/uploads/2010/02/start_import.jpg" alt="" width="551" height="200" /></p>
<h2>Langkah 7</h2>
<p>Masa yang terbaik untuk anda membancuh teh atau kopi sambil menunggu proses ini selesai. Setiap bahagian yang telah berjaya akan di paparkan pada web browser anda.</p>
<p><img class="alignnone size-full wp-image-431" title="import_database_in_progress" src="http://www.syahzul.com/wp-content/uploads/2010/02/import_database_in_progress.jpg" alt="" width="551" height="200" /></p>
<h2>Selesai!</h2>
<p><strong>Nota: </strong>Sekiranya anda menggunakan format file .sql untuk proses ini, dan tiba tiba screen web browser anda tidak memaparkan apa apa, cuba gunakan format .gz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/tutorial/2010/02/import-database-mysql-dengan-bigdump/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Video Tutorial: Pemasangan Web Server Xampp dan Joomla!</title>
		<link>http://www.syahzul.com/tutorial/2010/02/video-tutorial-pemasangan-web-server-xampp-dan-joomla/</link>
		<comments>http://www.syahzul.com/tutorial/2010/02/video-tutorial-pemasangan-web-server-xampp-dan-joomla/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 09:39:19 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Joomla!]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[xampp]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=420</guid>
		<description><![CDATA[Video tutorial kali ini, saya akan menunjukkan cara cara memasang web server xampp dan Joomla! di dalam komputer anda. www.youtube.com/watch?v=eFQHTPHy4Kg]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-679 post-image" title="Video Tutorial: Pemasangan Web Server Xampp dan Joomla!" src="http://www.syahzul.com/wp-content/uploads/2010/02/xampp.jpg" alt="" width="690" height="300" /></p>
<p>Video tutorial kali ini, saya akan menunjukkan cara cara memasang web server xampp dan Joomla! di dalam komputer anda.</p>
<p><span id="more-420"></span><span class="youtube">
<object width="550" height="420">
<param name="movie" value="http://www.youtube.com/v/eFQHTPHy4Kg&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1&amp;hd=1" />
<param name="allowFullScreen" value="true" />
<embed wmode="transparent" src="http://www.youtube.com/v/eFQHTPHy4Kg&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1&amp;hd=1" type="application/x-shockwave-flash" allowfullscreen="true" width="550" height="420"></embed>
<param name="wmode" value="transparent" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=eFQHTPHy4Kg&fmt=18"><img src="http://img.youtube.com/vi/eFQHTPHy4Kg/default.jpg" width="130" height="97" border=0></a></p><p><a href="http://www.youtube.com/watch?v=eFQHTPHy4Kg&fmt=18">www.youtube.com/watch?v=eFQHTPHy4Kg</a></p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/tutorial/2010/02/video-tutorial-pemasangan-web-server-xampp-dan-joomla/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Host subdomain di server yang lain menggunakan DirectAdmin</title>
		<link>http://www.syahzul.com/tutorial/2010/02/host-subdomain-di-server-yang-lain/</link>
		<comments>http://www.syahzul.com/tutorial/2010/02/host-subdomain-di-server-yang-lain/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 14:15:45 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[directadmin]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=407</guid>
		<description><![CDATA[Sekiranya anda mempunyai domain sendiri, anda boleh menambah subdomain yang anda mahukan, bergantung kepada berapa banyak yang web hoster beri. Kebiasaannya jumlah subdomain adalah unlimited. Pada setiap subdomain, anda boleh install apa sahaja script yang anda mahukan; WordPress, Joomla!, Drupal, ... ]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-681 post-image" title="Host subdomain di server yang lain menggunakan DirectAdmin" src="http://www.syahzul.com/wp-content/uploads/2010/02/directadmin.jpg" alt="" width="690" height="300" /></p>
<p>Sekiranya anda mempunyai domain sendiri, anda boleh menambah subdomain yang anda mahukan, bergantung kepada berapa banyak yang web hoster beri. Kebiasaannya jumlah subdomain adalah unlimited. Pada setiap subdomain, anda boleh install apa sahaja script yang anda mahukan; WordPress, Joomla!, Drupal, PHPBB dan lain lain.</p>
<p>Dan subdomain yang anda create itu sebenarnya boleh di host di server yang lain, bukan setakat pada server yang anda gunakan sahaja. Kurang faham? Mari tengok contoh.</p>
<p><span id="more-407"></span></p>
<p>Saya mempunyai 2 web server, dan maklumatnya seperti di bawah.</p>
<h4>Server A</h4>
<p><strong>Domain: </strong>syahzul.com<br />
<strong>Web hoster:</strong> ABC Host, US<br />
<strong>IP Address: </strong>111.333.444.555</p>
<h4>Server B</h4>
<p><strong>Domain: </strong>syahzul.net<br />
<strong>Web hoster: </strong>DEF Host, Malaysia<br />
<strong>IP Address: </strong>333.555.666.777</p>
<p><em class="error">Nota: Maklumat di atas adalah dummy data sahaja.</em></p>
<p>Apa yang ingin saya lakukan ialah, saya ingin host subdomain <strong>project.syahzul.com</strong> di <strong>Server B</strong>. Berikut adalah langkah langkah yang saya lakukan.</p>
<h3>Server A</h3>
<p>Pada server A, di control panel DirectAdmin, saya pergi ke <strong>DNS Management</strong>.</p>
<p><img class="alignnone size-full wp-image-408" title="DNS Management" src="http://www.syahzul.com/wp-content/uploads/2010/02/01.jpg" alt="DNS Management" width="551" height="200" /></p>
<p>Kemudian, pada bahagian bawah page tersebut, saya masukkan data yang diperlukan.</p>
<p><img class="alignnone size-full wp-image-409" title="Add A record" src="http://www.syahzul.com/wp-content/uploads/2010/02/02.jpg" alt="Add A record" width="551" height="200" /></p>
<p>1. Masukkan subdomain yang ingin digunakan, saya ingin gunakan project.syahzul.com, jadi saya hanya masukkan <strong>project </strong>sahaja di dalam text box itu.</p>
<p>2. Masukkan IP address server ke 2.</p>
<h3>Server B</h3>
<p>Pada server B pula, saya hanya perlu add <strong>project.syahzul.com</strong> sebagai domain baru. Masuk ke dalam DirectAdmin server B, pilih <strong>Domain Setup</strong>.</p>
<p><img class="alignnone size-full wp-image-410" title="Domain setup" src="http://www.syahzul.com/wp-content/uploads/2010/02/03.jpg" alt="Domain setup" width="551" height="200" /></p>
<p>Kemudian, pada page seterusnya, saya pergi ke <strong>Add Another Domain</strong>.</p>
<p><img class="alignnone size-full wp-image-411" title="Add another domain" src="http://www.syahzul.com/wp-content/uploads/2010/02/04.jpg" alt="Add another domain" width="551" height="200" /></p>
<p>Seterusnya, saya masukkan subdomain <strong>project.syahzul.com</strong> pada text box <strong>Domain</strong>.</p>
<p><img class="alignnone size-full wp-image-412" title="Add domain" src="http://www.syahzul.com/wp-content/uploads/2010/02/05.jpg" alt="Add domain" width="551" height="200" /></p>
<p>Sekarang, jika saya kembali ke Home pada DirectAdmin server B, subdomain <strong>project.syahzul.com</strong> sudahpun berada di dalam senarai. Jika saya click pada subdomain tersebut, saya boleh manage macam domain yang lain seperti tambah FTP akaun, tambah database dan lain lain lagi.</p>
<p>Selamat mencuba!</p>
<p><strong>Nota lagi:</strong></p>
<p>Kaedah ini hanya untuk sesiapa yang menggunakan DirectAdmin pada web server. Untuk cPanel, rasanya agak sukar kerana biasanya cPanel tidak sertakan DNS management.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/tutorial/2010/02/host-subdomain-di-server-yang-lain/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Video Tutorial : Light Effect Menggunakan Photoshop</title>
		<link>http://www.syahzul.com/tutorial/2010/02/video-tutorial-light-effect-menggunakan-photoshop/</link>
		<comments>http://www.syahzul.com/tutorial/2010/02/video-tutorial-light-effect-menggunakan-photoshop/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 09:09:57 +0000</pubDate>
		<dc:creator>syahzul</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.syahzul.com/?p=375</guid>
		<description><![CDATA[Mari belajar membuat Light Effect menggunakan Adobe Photoshop. Video tutorial ini akan menunjukkan cara membuat Light Effect menggunakan Pen Tool dan Brush Tool. Panjang video: 6 minit 31 saat. www.youtube.com/watch?v=Q0dKNmFCriQ Nota: * Ini merupakan video tutorial saya yang pertama, jadi ... ]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-689 post-image" title="Video Tutorial : Light Effect Menggunakan Photoshop" src="http://www.syahzul.com/wp-content/uploads/2010/02/light_effect2.jpg" alt="" width="690" height="300" /><br />
Mari belajar membuat Light Effect menggunakan Adobe Photoshop. Video tutorial ini akan menunjukkan cara membuat Light Effect menggunakan Pen Tool dan Brush Tool. Panjang video: 6 minit 31 saat.</p>
<p><span id="more-375"></span></p>
<p><span class="youtube">
<object width="550" height="420">
<param name="movie" value="http://www.youtube.com/v/Q0dKNmFCriQ&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1&amp;hd=1" />
<param name="allowFullScreen" value="true" />
<embed wmode="transparent" src="http://www.youtube.com/v/Q0dKNmFCriQ&amp;color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1&amp;hd=1" type="application/x-shockwave-flash" allowfullscreen="true" width="550" height="420"></embed>
<param name="wmode" value="transparent" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=Q0dKNmFCriQ&fmt=18"><img src="http://img.youtube.com/vi/Q0dKNmFCriQ/default.jpg" width="130" height="97" border=0></a></p><p><a href="http://www.youtube.com/watch?v=Q0dKNmFCriQ&fmt=18">www.youtube.com/watch?v=Q0dKNmFCriQ</a></p></p>
<p><strong>Nota:</strong><br />
* Ini merupakan video tutorial saya yang pertama, jadi harap anda semua dapat memberikan feedback supaya saya dapat memperbaiki lagi kualiti video tutorial akan datang.<br />
** Kualiti video pada Youtube agak mengecewakan, mungkin sebab guna akaun percuma. Tapi anda boleh download full HD video dari link di bawah ini.</p>
<p><a href="http://bit.ly/bMnudH">Download high quality video</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syahzul.com/tutorial/2010/02/video-tutorial-light-effect-menggunakan-photoshop/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
