<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-725983186717296243</id><updated>2011-11-27T15:37:49.207-08:00</updated><category term='linux'/><category term='ruby'/><category term='pagination'/><category term='blob'/><category term='gnokii'/><category term='ruby on rails'/><category term='smtp'/><category term='css'/><category term='sms'/><category term='mysql'/><category term='ror'/><category term='cakephp'/><category term='windows'/><category term='layouts'/><category term='email'/><category term='blog'/><category term='gsm modem'/><category term='cakesms'/><category term='instant rails'/><category term='attachments'/><title type='text'>Dunia Aturcara Laman Web [php,ruby,mysql,linux,apache]</title><subtitle type='html'>Blog ini fokus kepada aturcara laman web seperti PHP,Ruby On Rails, CakePHP,MySQL dan sebagainya</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-6897738412760452241</id><published>2009-12-18T22:21:00.001-08:00</published><updated>2009-12-18T22:21:48.713-08:00</updated><title type='text'>Ebook : Menjadi Pembangun CakePHP</title><content type='html'>Sila dapatkan Panduan Ebook dalam Bahasa Melayu, Menjadi Pembangun CakePHP di http://www.scribd.com/doc/24306363/Menjadi-Pembangun-CakePHP-Bazet&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-6897738412760452241?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/6897738412760452241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/12/ebook-menjadi-pembangun-cakephp.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/6897738412760452241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/6897738412760452241'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/12/ebook-menjadi-pembangun-cakephp.html' title='Ebook : Menjadi Pembangun CakePHP'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-238256261323799874</id><published>2009-09-30T19:17:00.001-07:00</published><updated>2009-09-30T19:17:41.512-07:00</updated><title type='text'>Contoh afterFind call back dalam CakePHP</title><content type='html'>Kod di bawah diletakkan di dalam model untuk mengubahsuai data yang dihantar supaya memasukkan data dari table lain untuk kegunaan dropdown menggunakan find('list')&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;  # untuk process dropdown&lt;br /&gt;  function afterFind($results) {&lt;br /&gt;&lt;br /&gt;      // load Package model here&lt;br /&gt;      App::import('Model','Package');&lt;br /&gt;      $this-&gt;PackageNumber = new PackageNumber();&lt;br /&gt;      $this-&gt;PackageNumber-&gt;recursive = -1;&lt;br /&gt;&lt;br /&gt;      #App::import('Helper', 'Time');&lt;br /&gt;      #$time = new TimeHelper();&lt;br /&gt;&lt;br /&gt;      # loop data&lt;br /&gt;&lt;br /&gt;      foreach ($results as $key =&gt; $val) {&lt;br /&gt;        # $val akan beri nilai package_no_id&lt;br /&gt;        # assign var baru nama title&lt;br /&gt;        if(!empty($val['SelectedSubcon']['package_no_id'])){&lt;br /&gt;          $package_id = $val['SelectedSubcon']['package_no_id'];&lt;br /&gt;          $package = $this-&gt;PackageNumber-&gt;read('title', $package_id);&lt;br /&gt;          $results[$key]['SelectedSubcon']['package_no_id'] = $package['PackageNumber']['title'];&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      return $results;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-238256261323799874?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/238256261323799874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/contoh-afterfind-call-back-dalam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/238256261323799874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/238256261323799874'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/contoh-afterfind-call-back-dalam.html' title='Contoh afterFind call back dalam CakePHP'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-1762569115692232265</id><published>2009-09-28T06:57:00.001-07:00</published><updated>2009-09-28T06:57:38.402-07:00</updated><title type='text'>From CakePHP to Ruby On Rails</title><content type='html'>Nice article,&lt;a href="http://www.jimmycuadra.com/blog/10-from-cake-to-rails"&gt; http://www.jimmycuadra.com/blog/10-from-cake-to-rails&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-1762569115692232265?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/1762569115692232265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/from-cakephp-to-ruby-on-rails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/1762569115692232265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/1762569115692232265'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/from-cakephp-to-ruby-on-rails.html' title='From CakePHP to Ruby On Rails'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-1137298406304712704</id><published>2009-09-18T16:28:00.000-07:00</published><updated>2009-09-18T16:53:52.948-07:00</updated><title type='text'>ROR: Bina sistem pengurusan pekerja : Siri 3</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrQXQsvrdkI/AAAAAAAAA04/Nj0wMOqgQkY/s1600-h/ror-employee.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrQXQsvrdkI/AAAAAAAAA04/Nj0wMOqgQkY/s400/ror-employee.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Siri ini saya akan mengajar kamu teknik-teknik berikut :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;membuat validation sebelum benarkan data disimpan dalam database&lt;/li&gt;&lt;li&gt;membuat dropdown untuk pilihan department dalam borang pendaftaran employee&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Validations&lt;/b&gt; &lt;br /&gt;Jika membuat aturcara di dalam PHP, untuk membuat tapisan borang, saya terpaksa membuat coding khas untuk menapis data yang dihantar melalui $_POST atau $_GET mengikut field-field form yang tersedia. Satu field seperti username umumnya akan memerlukan beberapa validation seperti :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;aksara minima&lt;/li&gt;&lt;li&gt;aksara maksima&lt;/li&gt;&lt;li&gt;kena periksa samaada username hanya mengandungi huruf dan nombor sahaj&lt;/li&gt;&lt;li&gt;kena periksa username tidak bertindan di dalam database&lt;/li&gt;&lt;/ul&gt;Dan untuk memeriksa 1 field sahaja, saya perlukan 1-2 hari untuk membuat kod PHP untuk tujuan itu. Tetapi kini dengan bantuan Ruby On Rails, validation hanya perlu di letak di dalam fail employees/apps/models/* sahaja.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Model Relationships&lt;/b&gt;&lt;br /&gt;Di dalalm dunia RoR, kita tidak perlu coding SQL yang kompleks seperti Joins,GroupBy dan sebagainya kerana RoR menggunakan konsep ORM atau Object Relational Mapping. Dalam projek ini&amp;nbsp; hubungan antara table employees dan departments adalah seperti berikut&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Department &lt;b&gt;hasMany&lt;/b&gt; Employees&lt;/li&gt;&lt;li&gt;&amp;nbsp;Employee &lt;b&gt;belongsTo&lt;/b&gt; Department&lt;/li&gt;&lt;/ul&gt;Di dalam table Employee ( employees ), ada satu kolum khas untuk merujuk Department manakah Employee itu dimiliki ( department_id ). Dalam RoR, kita perlu merujuk kepada Model dan bukannya nama table.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-1137298406304712704?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/1137298406304712704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/ror-bina-sistem-pengurusan-pekerja-siri_18.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/1137298406304712704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/1137298406304712704'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/ror-bina-sistem-pengurusan-pekerja-siri_18.html' title='ROR: Bina sistem pengurusan pekerja : Siri 3'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SrQXQsvrdkI/AAAAAAAAA04/Nj0wMOqgQkY/s72-c/ror-employee.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-466110996127249137</id><published>2009-09-18T06:17:00.000-07:00</published><updated>2009-09-18T07:52:46.503-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>ROR: Bina sistem pengurusan pekerja : Siri 2</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrOVkTNdUeI/AAAAAAAAA0o/ok8dke3mYl4/s1600-h/list-dept.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrOVkTNdUeI/AAAAAAAAA0o/ok8dke3mYl4/s400/list-dept.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://dunia-aturcara.blogspot.com/2009/09/bina-sistem-pengurusan-pekerja-siri-1.html"&gt;ROR: Bina sistem pengurusan pekerja : Siri 1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Siri ini adalah yang kedua dalam Tutorial Bina Sistem Pengurusan Pekerja. Sekarang anda telah mempunya projek Ruby On Rails yang bernama &lt;b&gt;employees &lt;/b&gt;yang terletak di &lt;b&gt;c:\ror_projects\employees&lt;/b&gt; .&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah 1 : Konfigurasi Database MySQL&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Untuk mengubah konfigurasi database MySQL, anda perlu mengubah fail berformat YAML di employees/config/database.yml . Perlu diingatkan, fail ini berformat YAML, jangan guna TAB , hanya spacing sahaja dibenarkan.&amp;nbsp; Buka fail tersebut dan ubah mengikut spefikasi anda, dalam tutorial ini saya menggunakan konfigurasi berikut :&lt;br /&gt;&lt;br /&gt;&lt;pre class="ruby" name="code"&gt;development:&lt;br /&gt;  adapter: mysql&lt;br /&gt;  encoding: utf8&lt;br /&gt;  reconnect: false&lt;br /&gt;  database: employees_development&lt;br /&gt;  pool: 5&lt;br /&gt;  username: root&lt;br /&gt;  password:&lt;br /&gt;  host: localhost&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Save fail tersebut dan seterusnya kita akan menggunakan arahan konsol untuk mencipta database bernama employees_development. Buka konsol MS-DOS anda dan pergi ke folder c:\ror_projects\employees. Untuk mencipta database, laksanakan arahan berikut :&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;rake db:create&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Arahan di atas akan mencipta satu database bernama employees_development. Anda boleh melihat database tersebut menggunakan PhpMyAdmin atau menggunakan MySQL Console.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrONnClGniI/AAAAAAAAA0A/HOoygsSmw5c/s1600-h/mysql-show-db.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrONnClGniI/AAAAAAAAA0A/HOoygsSmw5c/s400/mysql-show-db.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Gambar di atas menunjukkan database &lt;b&gt;employees_development&lt;/b&gt; telah berjaya dicipta, dengan menggunakan arahan show database, konsol &lt;b&gt;MySQL&lt;/b&gt; akan menyenaraikan kesemua database yang terkandung di dalamnya. &lt;b&gt;Ruby on Rails&lt;/b&gt; memudahkan anda untuk mencipta database dengan menggunakan arahan &lt;b&gt;&lt;span style="color: red;"&gt;rake db:create&lt;/span&gt;&lt;/b&gt; . Arahan ini sama sahaja seperti anda melaksanakan arahan c&lt;b&gt;reate database employees_development;&lt;/b&gt; di dalam konsol MySQL.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; color: #274e13; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; color: #274e13; text-align: left;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah 2 : cipta table employees dan departments&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Dalam tutorial ini, kita akan menggunakan 2 table, iaitu employees dan departments.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;struktur table departments&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;id : INTEGER &lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;name : STRING &lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;b&gt;struktur table employees&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;id : INTEGER &lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;department_id : INTEGER&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;first_name : STRING&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;last_name : STRING&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;hire_date :&amp;nbsp; DATE&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;kita akan mencipta kedua-dua table menggunakan arahan seperti di bawah &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;untuk cipta table departments&lt;br /&gt;&lt;pre class="php" name="code"&gt;ruby script\generate scaffold department name:string&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;dan hasilnya seperti di bawah :&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMSLAMTiap8/SrORrHUpx7I/AAAAAAAAA0I/vqw8gvZljq0/s1600-h/scaffold-department.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SrORrHUpx7I/AAAAAAAAA0I/vqw8gvZljq0/s400/scaffold-department.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;untuk cipta table employees&lt;br /&gt;&lt;pre class="php" name="code"&gt;ruby script\generate scaffold employee department:references first_name:string last_name:string hire_date:date&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;dan hasilnya adalah seperti berikut: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMSLAMTiap8/SrOSKLAUXjI/AAAAAAAAA0Q/1mEqjMMlQPc/s1600-h/scaffold-employees.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SrOSKLAUXjI/AAAAAAAAA0Q/1mEqjMMlQPc/s400/scaffold-employees.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ruby On Rails telah mencipta skeleton dan juga fail migration untuk kedua-dua table tersebut. Untuk melaksanakan arahan cipta table, sila ikut arahan di bawah :&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;rake db:migrate&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;dan hasilnya adalah seperti berikut, &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrOTWW_dAoI/AAAAAAAAA0Y/aiGItCkGYfg/s1600-h/rake-db-migrate.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrOTWW_dAoI/AAAAAAAAA0Y/aiGItCkGYfg/s400/rake-db-migrate.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Jika anda masuk kembali ke dalam konsol MySQL atau PhpMyAdmin, cuba lihat di dalam database employees_development. Akan terdapat 2 table di dalamnya, departments dan employees.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah 3 : mencuba aplikasi di browser&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Arahan generate scaffold di atas juga akan membina skeleton MVC sementara untuk table departments dan employees. Sekarang, anda buka alamat http://localhost:3000/departments , dan klik pautan new, dan tambah beberapa department.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMSLAMTiap8/SrOVuVW7A-I/AAAAAAAAA0w/H4cTS5dk6IU/s1600-h/sales.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SrOVuVW7A-I/AAAAAAAAA0w/H4cTS5dk6IU/s400/sales.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrOVkTNdUeI/AAAAAAAAA0o/ok8dke3mYl4/s1600-h/list-dept.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrOVkTNdUeI/AAAAAAAAA0o/ok8dke3mYl4/s400/list-dept.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMSLAMTiap8/SrOVAPEtGkI/AAAAAAAAA0g/lxLldH3_GY4/s1600-h/new-dept.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SrOVAPEtGkI/AAAAAAAAA0g/lxLldH3_GY4/s400/new-dept.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Hasil daripada arahan generate scaffold juga membolehkan anda menambah,pada,edit dan senarai data dari table departments.&lt;br /&gt;&lt;br /&gt;Siri 2 tamat di sini, Tunggu kenunculan Siri 3 tidak lama lagi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-466110996127249137?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/466110996127249137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/ror-bina-sistem-pengurusan-pekerja-siri.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/466110996127249137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/466110996127249137'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/ror-bina-sistem-pengurusan-pekerja-siri.html' title='ROR: Bina sistem pengurusan pekerja : Siri 2'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SrOVkTNdUeI/AAAAAAAAA0o/ok8dke3mYl4/s72-c/list-dept.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-6894805506961036285</id><published>2009-09-17T18:25:00.000-07:00</published><updated>2009-09-18T03:23:54.322-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='pagination'/><category scheme='http://www.blogger.com/atom/ns#' term='layouts'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CakePHP : Membina pagination seperti Digg.com</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMSLAMTiap8/SrNfd9fQXqI/AAAAAAAAAz4/JQJi-iUAFaE/s1600-h/pagination.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SrNfd9fQXqI/AAAAAAAAAz4/JQJi-iUAFaE/s400/pagination.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Dalam tutorial kali ini, kita akan menggunakan &lt;b&gt;layout &lt;/b&gt;khas yang dicipta sendiri tanpa menggunakan CSS dari kod yang dijana oleh &lt;b&gt;CakePHP.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Kita akan gunakan balik sistem dari tutorial kita sebelum ini , &lt;a href="http://dunia-aturcara.blogspot.com/2009/09/cakephp-membina-sistem-attachments-yang.html"&gt;Sistem Pengurusan Fail / Attachments&lt;/a&gt;&lt;b&gt;.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Untuk itu, kita akan cipta satu layout bernama &lt;b&gt;digg.ctp&lt;/b&gt; di dalam folder &lt;b&gt;app/views/layouts/.&lt;/b&gt;&lt;br /&gt;Untuk membolehkan seluruh aplikasi CakePHP menggunakan layout digg.ctp, kita perlu ubah fail &lt;b&gt;app/app_controller.php&lt;/b&gt; supaya menggunakan &lt;b&gt;digg.ctp&lt;/b&gt; sebagai layout utama. &lt;b&gt;Layout&lt;/b&gt; ini akan menggunakan &lt;b&gt;CSS&lt;/b&gt; khas yang bernama &lt;b&gt;digg.css&lt;/b&gt; akan akan diletakkan dalam folder app/webroot/digg.css.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #274e13;"&gt;Langkah 1&lt;/span&gt;&lt;/b&gt; : bina layout &lt;b&gt;digg.ctp&lt;/b&gt; dan save di dalam &lt;b&gt;app/views/layouts/digg.ctp&lt;/b&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;Sistem Pengurusan Fail&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;lt;?= $html-&amp;gt;css('digg'); ?&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;Sistem pengurusan fail&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;? $session-&amp;gt;flash(); ?&amp;gt;&lt;br /&gt;&amp;lt;?= $content_for_layout; ?&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Penerangan :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Di baris no 4, kita melaksanakan arahan supaya memanggil fail digg.css yang terletak di dalam folder &lt;b&gt;app/webroot/css/digg.css&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Di baris no 8, kod untuk paparkan mesej yang datang dari notis,ralat dan sebagainya&lt;/li&gt;&lt;li&gt;Di baris no 9, kod untuk paparkan hasil yang dijana oleh &lt;b&gt;controller&lt;/b&gt; dan &lt;b&gt;view&lt;/b&gt;&lt;/li&gt;&lt;/ol&gt;Seterusnya, cipta fail &lt;b&gt;digg.css&lt;/b&gt; di &lt;b&gt;app/webroot/css/digg.css&lt;/b&gt; &lt;br /&gt;&lt;pre class="css" name="code"&gt;/* letak css di sini */&lt;br /&gt;* {&lt;br /&gt;  margin-left:0px;&lt;br /&gt;  padding:0px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;body {&lt;br /&gt;  background: lightblue;&lt;br /&gt;  color: black;&lt;br /&gt;  font-family:'lucida grande',verdana,helvetica,arial,sans-serif;&lt;br /&gt;  font-size:90%;&lt;br /&gt;  margin: 30px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Untuk membolehkan &lt;b&gt;digg.ctp&lt;/b&gt; digunakan sebagai layout utama di dalam aplikasi &lt;b&gt;CakePHP&lt;/b&gt;, kita perlu cipta satu fail bernama &lt;b&gt;app/app_controller.php &lt;/b&gt;. App Controller ini berfungsi sebagai &lt;b&gt;&lt;i&gt;penghulu&lt;/i&gt;&lt;/b&gt; kepada semua controller di dalam sistem CakePHP. Sila lihat kod di bawah&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php&lt;br /&gt;class AppController extends Controller {&lt;br /&gt;  # gunakan digg.ctp sebagai layout utama&lt;br /&gt;  var $layout = 'digg';&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;Sila lihat baris no 4.&lt;br /&gt;&lt;br /&gt;Kemudian uji aplikasi &lt;b&gt;Pengurusan Fail &lt;/b&gt;anda di &lt;b style="color: blue;"&gt;http://localhost/attachments&lt;/b&gt;, hasilnya berbentuk seperti berikut :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMSLAMTiap8/SrMWo16cZwI/AAAAAAAAAzo/TOjk4jYqZSw/s1600-h/biru-layout.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SrMWo16cZwI/AAAAAAAAAzo/TOjk4jYqZSw/s400/biru-layout.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Dengan menggunakan digg.css, kita boleh mengawal bentuk layout, jenis font dan warna sistem.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #274e13;"&gt;Langkah 2&lt;/span&gt;&lt;/b&gt; : ubahsuai kod action index supaya menggunakan Pagination&lt;br /&gt;url rujukan : &lt;a href="http://book.cakephp.org/view/164/Pagination"&gt;http://book.cakephp.org/view/164/Pagination &lt;/a&gt;&lt;br /&gt;Untuk menggunakan fungsi Pagination, kod action di dalam index mesti diubahsuai seperti berikut &lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;class AttachmentsController extends AppController {&lt;br /&gt;  var $name = 'Attachments';&lt;br /&gt;  var $paginate = array(&lt;br /&gt;                  # hanya keluarkan field yang perlu sahaja&lt;br /&gt;                  'fields' =&amp;gt; array('id','name','type','size','created'),&lt;br /&gt;                  # buat susunan supaya order by id DESC&lt;br /&gt;                  'order' =&amp;gt; 'id DESC',&lt;br /&gt;                  # limitkan item yang dipaparkan&lt;br /&gt;                  'limit' =&amp;gt; 2,&lt;br /&gt;                   );&lt;br /&gt;&lt;br /&gt;  # untuk paparkan senarai fail&lt;br /&gt;  # untuk upload fail&lt;br /&gt;  function index(){&lt;br /&gt;    # melihat kandungan fail&lt;br /&gt;    #debug($this-&amp;gt;data);&lt;br /&gt;    if( $this-&amp;gt;data &amp;amp;&amp;amp;&lt;br /&gt;        is_uploaded_file($this-&amp;gt;data['Attachment']['file']['tmp_name']) ){&lt;br /&gt;&lt;br /&gt;        # fail wujud dan file dah upload, kita nak baca bentuk binari&lt;br /&gt;        # untuk simpan dalam database&lt;br /&gt;        $filedata = fread(fopen($this-&amp;gt;data['Attachment']['file']['tmp_name'], "r"),&lt;br /&gt;                                     $this-&amp;gt;data['Attachment']['file']['size']);&lt;br /&gt;&lt;br /&gt;        # untuk beri nama kepada fail&lt;br /&gt;        $filename = basename($this-&amp;gt;data['Attachment']['file']['name']);&lt;br /&gt;&lt;br /&gt;        # assignkan uploaded data ke bentuk cakephp&lt;br /&gt;        $this-&amp;gt;data['Attachment']['data'] = $filedata;&lt;br /&gt;        $this-&amp;gt;data['Attachment']['name'] = $filename;&lt;br /&gt;        $this-&amp;gt;data['Attachment']['size'] = $this-&amp;gt;data['Attachment']['file']['size'];&lt;br /&gt;        $this-&amp;gt;data['Attachment']['type'] = $this-&amp;gt;data['Attachment']['file']['type'];&lt;br /&gt;&lt;br /&gt;        # save ke dalam database&lt;br /&gt;        if($this-&amp;gt;Attachment-&amp;gt;save($this-&amp;gt;data)){&lt;br /&gt;          $this-&amp;gt;Session-&amp;gt;setFlash('Berjaya save ke database');&lt;br /&gt;        } else {&lt;br /&gt;          $this-&amp;gt;Session-&amp;gt;setFlash('Gagal save ke database');&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }else{&lt;br /&gt;      # fail tidak wujud dan beri mesej&lt;br /&gt;      #$this-&amp;gt;Session-&amp;gt;setFlash('Tiada fail dikesan !');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    # senaraikan data guna Pagination&lt;br /&gt;    $attachments = $this-&amp;gt;Paginate('Attachment');&lt;br /&gt;&lt;br /&gt;    # setkan nilai ke index.ctp&lt;br /&gt;    $this-&amp;gt;set(compact('attachments'));&lt;br /&gt;  } // tamat action index&lt;br /&gt;&lt;br /&gt;} // tamat class  &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #274e13;"&gt;Langkah 3&lt;/span&gt;&lt;/b&gt; :ubahsuai kod app/webroot/css/digg.css&lt;br /&gt;&lt;br /&gt;&lt;pre class="css" name="code"&gt;/* letak css di sini */&lt;br /&gt;* {&lt;br /&gt;  margin-left:0px;&lt;br /&gt;  padding:0px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;body {&lt;br /&gt;  background: lightblue;&lt;br /&gt;  color: black; &lt;br /&gt;  font-family:'lucida grande',verdana,helvetica,arial,sans-serif;&lt;br /&gt;  font-size:90%;&lt;br /&gt;  margin: 30px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* Paging */&lt;br /&gt;div.paging {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div.paging table{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div.paging a {&lt;br /&gt;  padding: 2px 5px 2px 5px;&lt;br /&gt;  margin: 2px;&lt;br /&gt;  border: 1px solid #02a6fb;&lt;br /&gt;  text-decoration: none; /* no underline */&lt;br /&gt;  color: #02a6fb;&lt;br /&gt;}&lt;br /&gt;div.paging a:hover, div.paging a:active {&lt;br /&gt;  border: 1px solid #02a6fb;&lt;br /&gt;&lt;br /&gt;  color: #000;&lt;br /&gt;}&lt;br /&gt;div.paging span.current {&lt;br /&gt;  padding: 2px 5px 2px 5px;&lt;br /&gt;  margin: 2px;&lt;br /&gt;  border: 1px solid #bbb;&lt;br /&gt;  font-weight: bold;&lt;br /&gt;  color: blue;&lt;br /&gt; background: #f2f2f2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;div.paging .disable{&lt;br /&gt;  padding: 2px 5px 2px 5px;&lt;br /&gt;  margin: 2px;&lt;br /&gt;  border: 1px solid #BBB;&lt;br /&gt;  text-decoration: none; /* no underline */&lt;br /&gt;  color: blue;&lt;br /&gt; background: #f2f2f2;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Tables */&lt;br /&gt;div.index table {&lt;br /&gt;  background: #fff;&lt;br /&gt;  border:1px solid #ccc;&lt;br /&gt;  border-right:0;&lt;br /&gt;  clear: both;&lt;br /&gt;  color: #333;&lt;br /&gt;  margin-bottom: 10px;&lt;br /&gt;  width: 100%;&lt;br /&gt;}&lt;br /&gt;div.index th {&lt;br /&gt;  background: #f2f2f2;&lt;br /&gt;  border:1px solid #bbb;&lt;br /&gt;  border-top: 1px solid #fff;&lt;br /&gt;  border-left: 1px solid #fff;&lt;br /&gt;  text-align: center;&lt;br /&gt;}&lt;br /&gt;div.index th a {&lt;br /&gt;  background:#f2f2f2;&lt;br /&gt;  display: block;&lt;br /&gt;  padding: 2px 4px;&lt;br /&gt;  text-decoration: none;&lt;br /&gt;}&lt;br /&gt;div.index th a:hover {&lt;br /&gt;  background: #ccc;&lt;br /&gt;  color: #333;&lt;br /&gt;  text-decoration: none;&lt;br /&gt;}&lt;br /&gt;div.index table tr td {&lt;br /&gt;  background: #fff;&lt;br /&gt;  border-right: 1px solid #ccc;&lt;br /&gt;  padding: 4px;&lt;br /&gt;  text-align: center;&lt;br /&gt;  vertical-align: top;&lt;br /&gt;}&lt;br /&gt;div.index table tr.altrow td {&lt;br /&gt;  background: #f4f4f4;&lt;br /&gt;}&lt;br /&gt;div.index td.actions {&lt;br /&gt;  text-align: center;&lt;br /&gt;  white-space: nowrap;&lt;br /&gt;}&lt;br /&gt;div.index td.actions a {&lt;br /&gt;  margin: 0px 6px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Yang terakhir, ubah kod &lt;b&gt;app/views/attachments/index.ctp&lt;/b&gt; seperti berikut :&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?= $form-&amp;gt;create('Attachment', array('action' =&amp;gt; 'index', 'type' =&amp;gt; 'file')); ?&amp;gt;&lt;br /&gt;&amp;lt;?= $form-&amp;gt;file('file'); ?&amp;gt;&lt;br /&gt;&amp;lt;?= $form-&amp;gt;end('Muat Naik'); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;? if(isset($attachments)): ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="index"&gt;&lt;table&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;   &lt;th&gt;ID&lt;br /&gt;&lt;br /&gt;&lt;/th&gt;   &lt;th&gt;Nama&lt;br /&gt;&lt;br /&gt;&lt;/th&gt;   &lt;th&gt;Jenis&lt;br /&gt;&lt;br /&gt;&lt;/th&gt;   &lt;th&gt;Tarikh Muat Naik&lt;br /&gt;&lt;br /&gt;&lt;/th&gt;   &lt;th&gt;Saiz&lt;br /&gt;&lt;br /&gt;&lt;/th&gt;   &lt;th&gt;Operasi&lt;br /&gt;&lt;br /&gt;&lt;/th&gt;   &lt;/tr&gt;&lt;br /&gt;&amp;lt;? foreach($attachments as $a): ?&amp;gt;&lt;br /&gt;&lt;tr&gt;   &lt;td&gt;&amp;lt;?= $a['Attachment']['id'];?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&amp;lt;?= $a['Attachment']['name'];?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&amp;lt;?= $a['Attachment']['type'];?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&amp;lt;?= $time-&amp;gt;timeAgoInWords($a['Attachment']['created']);?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&amp;lt;?= round($a['Attachment']['size']/1000); ?&amp;gt; kb&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;   &lt;td&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?= $html-&amp;gt;link('Muat turun', array('action' =&amp;gt; 'download', $a['Attachment']['id'])); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;|&lt;br /&gt;&lt;br /&gt;&amp;lt;?= $html-&amp;gt;link('Hapus', array('action' =&amp;gt; 'delete', $a['Attachment']['id']),null, 'Hapus fail ?'); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;   &lt;/tr&gt;&lt;br /&gt;&amp;lt;? endforeach; ?&amp;gt; &lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="paging"&gt;&lt;table&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt; &lt;td&gt;&amp;lt;?php echo $paginator-&amp;gt;prev('&amp;lt;&amp;lt;', array(), null, array('class'=&amp;gt;'disable'));?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt; &lt;td&gt;&amp;lt;?php echo $paginator-&amp;gt;numbers(array('separator'=&amp;gt; ''));?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt; &lt;td&gt;&amp;lt;?php echo $paginator-&amp;gt;next('&amp;gt;&amp;gt;', array(), null, array('class'=&amp;gt;'disable'));?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&amp;lt;? endif; ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Buka browser anda di http://localhost/attachments dan hasilnya adalah seperti berikut :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMSLAMTiap8/SrNfG8D5HFI/AAAAAAAAAzw/sNb7MqPcgPk/s1600-h/pagination.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SrNfG8D5HFI/AAAAAAAAAzw/sNb7MqPcgPk/s400/pagination.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-6894805506961036285?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/6894805506961036285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakephp-membina-pagination-seperti.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/6894805506961036285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/6894805506961036285'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakephp-membina-pagination-seperti.html' title='CakePHP : Membina pagination seperti Digg.com'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SrNfd9fQXqI/AAAAAAAAAz4/JQJi-iUAFaE/s72-c/pagination.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-3934941775469161787</id><published>2009-09-17T08:40:00.000-07:00</published><updated>2009-09-17T08:42:05.251-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='smtp'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><title type='text'>CakePHP : Menghantar email menggunakan SMTP</title><content type='html'>Menghantar email menggunakan CakePHP amat mudah dengan kehadiran komponen Email. Kebiasaannya kita akan menghantar email menggunakan server email yang terbina dalam sistem operasi seperti Linux, qmail atau sendmail.&lt;br /&gt;&lt;br /&gt;Bagaimana jika membina aplikasi di dalam platform Windows dan ingin menggunakan email melalui protokol SMTP ?&lt;br /&gt;&lt;br /&gt;Di dalam tutorial ini saya akan membina controller bernama notify_controller.php dan tanpa menggunakan model. Sila lihat kod di bawah :&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="php"&gt;&lt;&amp;#63;php&lt;br /&gt;class NotifyController extends AppController {&lt;br /&gt;&lt;br /&gt;  var $name = 'Notify';&lt;br /&gt;  var $components = array('Email');&lt;br /&gt;  var $uses = null;&lt;br /&gt;&lt;br /&gt;  function index(){&lt;br /&gt;&lt;br /&gt;     $this-&gt;Email-&gt;smtpOptions = array(&lt;br /&gt;        'port'=&gt;'25',&lt;br /&gt;        'timeout'=&gt;'30',&lt;br /&gt;        'host' =&gt;'your.smtp.host',&lt;br /&gt;        'username'=&gt;'username',&lt;br /&gt;        'password'=&gt;'password');&lt;br /&gt;&lt;br /&gt;      $this-&gt;Email-&gt;sendAs = 'html';&lt;br /&gt;&lt;br /&gt;      /* Set delivery method */&lt;br /&gt;      $this-&gt;Email-&gt;delivery = 'smtp';&lt;br /&gt;&lt;br /&gt;      $this-&gt;Email-&gt;to = "azril.nazli@gmail.com";&lt;br /&gt;      $this-&gt;Email-&gt;subject = 'Percubaan hantar email guna SMTP';&lt;br /&gt;      $this-&gt;Email-&gt;from = 'azril.nazli@gmail.com';&lt;br /&gt;      $content = "Ini adalah percubaan hantar SMTP email";&lt;br /&gt;&lt;br /&gt;      if ( $this-&gt;Email-&gt;send($content) ) {&lt;br /&gt;            $this-&gt;Session-&gt;setFlash('Email berjaya dihantar');&lt;br /&gt;       } else {&lt;br /&gt;            $this-&gt;Session-&gt;setFlash('Email gagal dihantar');&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;  } //index&lt;br /&gt;}&lt;br /&gt;&amp;#63;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-3934941775469161787?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/3934941775469161787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakephp-menghantar-email-menggunakan.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/3934941775469161787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/3934941775469161787'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakephp-menghantar-email-menggunakan.html' title='CakePHP : Menghantar email menggunakan SMTP'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-7094462164566050284</id><published>2009-09-16T23:49:00.000-07:00</published><updated>2009-09-16T23:51:32.018-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='gsm modem'/><category scheme='http://www.blogger.com/atom/ns#' term='gnokii'/><category scheme='http://www.blogger.com/atom/ns#' term='cakesms'/><category scheme='http://www.blogger.com/atom/ns#' term='sms'/><title type='text'>CakeSMS : Tutorial pengurusan sistem SMS</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMSLAMTiap8/SrHbT8N6E8I/AAAAAAAAAzg/XlJGbNU8Dqc/s1600-h/sms-server.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SrHbT8N6E8I/AAAAAAAAAzg/XlJGbNU8Dqc/s400/sms-server.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;CakeSMS adalah tutorial lengkap menggunakan :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Linux Fedora 9&lt;/li&gt;&lt;li&gt;CakePHP 1.2&lt;/li&gt;&lt;li&gt;Sony Ericsson W980 / GSM Modem&lt;/li&gt;&lt;li&gt;MySQL&lt;/li&gt;&lt;li&gt;Apache&lt;/li&gt;&lt;li&gt;Gnokii - SMSD &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;untuk membina sistem pengurusan SMS menggunakan GSM Modem atau telefon mudah alih sebagai penghantar dan penerima SMS. Untuk mengikuti dengan lengkap tutorial ini, sila ke laman web rasmi CakeSMS di &amp;nbsp;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="http://cakesms.blogspot.com/"&gt;http://cakesms.blogspot.com&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-7094462164566050284?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/7094462164566050284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakesms-tutorial-pengurusan-sistem-sms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/7094462164566050284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/7094462164566050284'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakesms-tutorial-pengurusan-sistem-sms.html' title='CakeSMS : Tutorial pengurusan sistem SMS'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_PMSLAMTiap8/SrHbT8N6E8I/AAAAAAAAAzg/XlJGbNU8Dqc/s72-c/sms-server.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-1687225520293631979</id><published>2009-09-16T23:41:00.000-07:00</published><updated>2009-09-16T23:41:25.990-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>CakePHP : Bina aturcara blog guna CakePHP</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrHZ8keaIYI/AAAAAAAAAzY/uxSYLdxl2J4/s1600-h/bina-blog.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrHZ8keaIYI/AAAAAAAAAzY/uxSYLdxl2J4/s400/bina-blog.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;CakePHP ialah satu framework yang lengkap untuk memudahkan anda membina aplikais berasaskan web dengan cepat,pantas dan selamat. Jika anda masih baru dalam dunia CakePHP, sila download PDF di bawah. Di dalamnya ada panduan lengkap untuk memulakan projek CakePHP anda yang pertama.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mamakspot.googlecode.com/files/Azril%20Nazli%20Books%20-%20Membina%20Blog%20menggunakan%20CakePHP.pdf"&gt;Ebook Bina Blog Guna CakePHP 1.2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sebelum memulakan projek ini, anda perlu mempunyai asas berikut :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;asas HTML&lt;/li&gt;&lt;li&gt;asas PHP&lt;/li&gt;&lt;li&gt;asas MySQL&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: x-small;"&gt;Rujukan :&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;CakePHP ~ http://www.cakephp.org&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-1687225520293631979?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/1687225520293631979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakephp-bina-aturcara-blog-guna-cakephp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/1687225520293631979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/1687225520293631979'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakephp-bina-aturcara-blog-guna-cakephp.html' title='CakePHP : Bina aturcara blog guna CakePHP'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SrHZ8keaIYI/AAAAAAAAAzY/uxSYLdxl2J4/s72-c/bina-blog.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-708751220825904974</id><published>2009-09-16T19:56:00.000-07:00</published><updated>2009-09-18T06:04:37.330-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='attachments'/><category scheme='http://www.blogger.com/atom/ns#' term='blob'/><title type='text'>CakePHP : Membina sistem "attachments" yang mudah</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMSLAMTiap8/SrHL7Q4BtzI/AAAAAAAAAzQ/V6HPJUpY7hQ/s1600-h/pengurusan-fail.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SrHL7Q4BtzI/AAAAAAAAAzQ/V6HPJUpY7hQ/s400/pengurusan-fail.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Sebelum mengikuti tutorial ini, pastikan anda telah mempunyai asas CakePHP. Jika belum, anda boleh &lt;a href="http://mamakspot.googlecode.com/files/Azril%20Nazli%20Books%20-%20Membina%20Blog%20menggunakan%20CakePHP.pdf"&gt;&lt;b&gt;download&lt;/b&gt;&amp;nbsp; PDF untuk memulakan sistem Ebook berasaskan CakePHP di sini&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Senario&lt;/b&gt;&lt;br /&gt;Anda perlu membina satu sistem untuk mengurus fail-fail seperti Microsoft Documents, PDF, gambar-gambar dan juga fail berbentuk zip.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Penyelesaian&lt;/b&gt;&lt;br /&gt;Kita akan gunakan CakePHP versi 1.2 stable&lt;br /&gt;Database storan akan menggunakan MySQL&lt;br /&gt;1 table akan digunakan iaitu attachments &lt;br /&gt;Kita akan simpan fail yang diupload ke dalam satu kolum bernama 'data'&lt;br /&gt;Kolum 'data' adalah berbentuk BLOB ( untuk menyimpan binary )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah pertama : Bina table bernama "attachments"&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Gunakan PHPMyAdmin atau MySQL Console untuk bina table berikut di dalam database yang digunakan oleh aplikasi CakePHP anda&lt;br /&gt;&lt;br /&gt;&lt;pre class="sql" name="code"&gt;CREATE TABLE attachments (&lt;br /&gt;&amp;nbsp; id INT(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;&amp;nbsp; name VARCHAR(75) NOT NULL,&lt;br /&gt;&amp;nbsp; type VARCHAR(255) NOT NULL,&lt;br /&gt;&amp;nbsp; size INT(11) NOT NULL,&lt;br /&gt;&amp;nbsp; data MEDIUMBLOB NOT NULL,&lt;br /&gt;&amp;nbsp; created DATETIME,&lt;br /&gt;&amp;nbsp; modified DATETIME,&lt;br /&gt;&amp;nbsp; PRIMARY KEY (id)&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah kedua : bina model bernama Attachment&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;cara pertama : cake bake shell di dalam console&lt;br /&gt;&lt;pre class="shell" name="code"&gt;cake bake model attachment&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Arahan di atas akan membina satu fail model di app/models/attachment.php&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php&lt;br /&gt;class Attachment extends AppModel {&lt;br /&gt;&lt;br /&gt;  var $name = 'Attachment';&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/pre&gt;Atau anda boleh cipta fail tersebut menggunakan editor dan letakkan di folder &lt;b&gt;app/models/attachment.php&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah ke-tiga : bina controller bernama Attachments&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Dengan menggunakan cake shell command, laksanakan arahan berikut untuk membina controller untuk Attachments&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;cake bake controller attachments&lt;br /&gt;&lt;/pre&gt;hasilnya adalah seperti berikut&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php&lt;br /&gt;class AttachmentsController extends AppController {&lt;br /&gt;&lt;br /&gt;  var $name = 'Attachments';&lt;br /&gt;  var $scaffold;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;br /&gt;Tetapi kita tidak akan menggunakan fungsi $scaffold, dan hanya akan gunakan 3 function / action sahaja iaitu&lt;br /&gt;&lt;ol&gt;&lt;li&gt;index&lt;/li&gt;&lt;li&gt;download&lt;/li&gt;&lt;li&gt;delete&lt;/li&gt;&lt;/ol&gt;Jadi ubah controller&amp;nbsp; app/controllers/attachments_controller.php anda seperti kod di bawah&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php&lt;br /&gt;class AttachmentsController extends AppController {&lt;br /&gt;&lt;br /&gt;  var $name = 'Attachments';&lt;br /&gt;  #var $scaffold;&lt;br /&gt;&lt;br /&gt;  # untuk paparkan senarai fail&lt;br /&gt;  # untuk upload fail&lt;br /&gt;  function index(){&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  # untuk membolehkan fail download dari database&lt;br /&gt;  function download(){&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  # untuk padam fail dalam database&lt;br /&gt;  function delete(){&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah ke-empat : bina folder views untuk Attachments&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Seterusnya, kita perlu bina satu folder khas untuk attachments di &lt;b&gt;app/views/attachments&lt;/b&gt; .Di dalam folder ini akan menyimpan fail-fail views untuk controller attachments. Dalam projek ini, kita hanya perlukan satu fail view sahaja, iaitu &lt;b&gt;index.ctp . &lt;/b&gt;Fail ini adalah untuk mengeluarkan data yang dikeluarkan oleh &lt;b&gt;action index&lt;/b&gt; di dalam &lt;b&gt;controller Attachments&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;mkdir app/views/attachments&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Setelah folder &lt;b&gt;container &lt;/b&gt;untuk attachments telah dibuat, cipta satu fail bernama &lt;b&gt;index.ctp&lt;/b&gt; di dalamnya dan masukkan kod berikut&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?= $form-&amp;gt;create('Attachment', array('action' =&amp;gt; 'index', 'type' =&amp;gt; 'file')); ?&amp;gt;&lt;br /&gt;&amp;lt;?= $form-&amp;gt;file('file'); ?&amp;gt;&lt;br /&gt;&amp;lt;?= $form-&amp;gt;end('Muat Naik'); ?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Kod di atas akan menjana borang html dengan menggunakan bantuan dari librari &lt;b&gt;CakePHP&lt;/b&gt; bernama &lt;b&gt;FormHelper&lt;/b&gt;. Hasilnya adalah kod HTML seperti di bawah&lt;br /&gt;&lt;br /&gt;&lt;pre class="html" name="code"&gt;&lt;form action="/azril/attachments" enctype="multipart/form-data" id="AttachmentIndexForm" method="post"&gt;&lt;fieldset style="display: none;"&gt;&lt;input name="_method" type="hidden" value="POST" /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/fieldset&gt;&lt;input id="AttachmentFile" name="data[Attachment][file]" type="file" value="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="submit"&gt;&lt;input type="submit" value="Muat Naik" /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/form&gt;&lt;br /&gt;&lt;/pre&gt;Hasilnya di dalam browser, http://localhost/attachments/index&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMSLAMTiap8/SrGzyLNXi9I/AAAAAAAAAyQ/qErEegR6LcM/s1600-h/uploader.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SrGzyLNXi9I/AAAAAAAAAyQ/qErEegR6LcM/s400/uploader.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah ke-lima : menguji sistem upload&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Sekarang kita telah mempunyai sistem upload, jika klik buton "Muat Naik" sistem akan "upload" fail ke dalam server. Sebelum kita boleh masukkan data ke dalam &lt;b&gt;database&lt;/b&gt;, kita perlu tahu data-data yang dihantar menggunakan borang &lt;b&gt;HTML&lt;/b&gt; tersebut.&lt;br /&gt;&lt;br /&gt;Di dalam &lt;b&gt;CakePHP&lt;/b&gt; ada satu arahan bernama &lt;b&gt;debug($var)&lt;/b&gt;. Arahan ini berfungsi sebagai pasaukan bedah siasat, yakni untuk melihat kandungan yang dibawa oleh &lt;b&gt;variable&lt;/b&gt;. Di dalam &lt;b&gt;CakePHP&lt;/b&gt;, variable borang&lt;b&gt; HTML&lt;/b&gt; akan dihantar ke controller menggunakan satu variable yang dipanggil &lt;b&gt;$this-&amp;gt;data&lt;/b&gt; . Jadi untuk melihat kandungan variable &lt;b&gt;$this-&amp;gt;data&lt;/b&gt;, kita boleh letakkan arahan &lt;b&gt;&lt;span style="color: red;"&gt;debug($this-&amp;gt;data)&lt;/span&gt;&lt;/b&gt; di dalam action index . Ubahsuai kod &lt;b&gt;app/controllers/attachments_controller.php&lt;/b&gt; anda supaya berbentuk seperti di bawah :&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php&lt;br /&gt;class AttachmentsController extends AppController {&lt;br /&gt;&lt;br /&gt;  var $name = 'Attachments';&lt;br /&gt;  #var $scaffold;&lt;br /&gt;&lt;br /&gt;  # untuk paparkan senarai fail&lt;br /&gt;  # untuk upload fail&lt;br /&gt;  function index(){&lt;br /&gt;    # untuk melihat isi kandung $this-&amp;gt;data&lt;br /&gt;    debug($this-&amp;gt;data);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  # untuk membolehkan fail download dari database&lt;br /&gt;  function download(){&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  # untuk padam fail dalam database&lt;br /&gt;  function delete(){&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;br /&gt;Seterusnya cuba upload sebarang fail dan lihat hasilnya di dalam browser.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrG3-OUoQoI/AAAAAAAAAyY/d8fKFqXeqis/s1600-h/debug.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrG3-OUoQoI/AAAAAAAAAyY/d8fKFqXeqis/s400/debug.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Cuba lihat gambar di atas, fungsi debug(); telah berjaya membuat bedah siasat kandungan yang dibawa oleh variable $this-&amp;gt;data. Data yang di bawa oleh variable $this-&amp;gt;data adalah berbentuk Array() yang mengikut susunan berikut&lt;br /&gt;&lt;span style="color: red; font-size: small;"&gt;&lt;b&gt;$this-&amp;gt;data[ nama model yang digunakan, Attachment ][ form field,file ][ maklumat mengenai fail ]&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Untuk mengesan jika ada fail yang diupload, kita perlu cipta satu mekanisme pengesanan. Hanya lakukan proses penyimpanan data ke dalam database jika fail berjaya diupload. Untuk itu kita perlu ubah kod action index di dalam attachments_controller.php seperti berikut :&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;# untuk paparkan senarai fail&lt;br /&gt;  # untuk upload fail&lt;br /&gt;  function index(){&lt;br /&gt;    # melihat kandungan fail&lt;br /&gt;    debug($this-&amp;gt;data);&lt;br /&gt;    if( $this-&amp;gt;data &amp;amp;&amp;amp;&lt;br /&gt;        is_uploaded_file($this-&amp;gt;data['Attachment']['file']['tmp_name']) ){&lt;br /&gt;      # fail wujud&lt;br /&gt;    }else{&lt;br /&gt;      # fail tidak wujud dan beri mesej&lt;br /&gt;      $this-&amp;gt;Session-&amp;gt;setFlash('Tiada fail dikesan !');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;Anda boleh cuba untuk klik Muat Naik tanpa memilih sebarang fail dan hasilnya akan akan dapat mesej error seperti gambar di bawah.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMSLAMTiap8/SrG6quwVbeI/AAAAAAAAAyg/f92I9wqfaoE/s1600-h/no-upload.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SrG6quwVbeI/AAAAAAAAAyg/f92I9wqfaoE/s400/no-upload.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Jika anda berjaya mendapat mesej seperti di atas, bermaksud kod pengesanan telah berjaya. Mari kita lihat kod pengesanan yang digunakan&lt;br /&gt;&lt;ol class="dp-c" start="1"&gt;&lt;li class=""&gt;if(&amp;nbsp;$this-&amp;gt;data&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li class="alt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;is_uploaded_file($this-&amp;gt;data['Attachment']['file']['tmp_name'])&amp;nbsp;){&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Pada baris 1, fungsi&lt;span style="color: red;"&gt; if()&lt;/span&gt; akan cuba&amp;nbsp; mengesan kehadiran 2 variable, iaitu &lt;b&gt;$this-&amp;gt;data&lt;/b&gt;, untuk menandakan bahawa sesorang telah submit &lt;b&gt;HTML&lt;/b&gt; form dan juga kehadiran fail sementara di dalam folder sementara, &lt;b&gt;/tmp&lt;/b&gt;, menggunakan arahan fungsi&lt;span style="color: red;"&gt; is_uploaded_file()&lt;/span&gt; . Jika kedua-dua variable adalah benar ( true ) baru laksanakan arahan penyimpanan ke dalam database.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;Langkah ke-enam : Simpan fail yang dihantar ke dalam database &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Setelah kita berjaya membuat kod pengesanan fail, barulah kita boleh extrak data daripada array dan susun semula mengikut format CakePHP untuk menyimpan data dan fail ke dalam table attachments. Sila ubah kod action index seperti berikut&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;# untuk paparkan senarai fail&lt;br /&gt;  # untuk upload fail&lt;br /&gt;  function index(){&lt;br /&gt;    # melihat kandungan fail&lt;br /&gt;    debug($this-&amp;gt;data);&lt;br /&gt;    if( $this-&amp;gt;data &amp;amp;&amp;amp;&lt;br /&gt;        is_uploaded_file($this-&amp;gt;data['Attachment']['file']['tmp_name']) ){&lt;br /&gt;&lt;br /&gt;        # fail wujud dan file dah upload, kita nak baca bentuk binari&lt;br /&gt;        # untuk simpan dalam database&lt;br /&gt;        $filedata = fread(fopen($this-&amp;gt;data['Attachment']['file']['tmp_name'], "r"),&lt;br /&gt;                                     $this-&amp;gt;data['Attachment']['file']['size']);&lt;br /&gt;&lt;br /&gt;        # untuk beri nama kepada fail&lt;br /&gt;        $filename = basename($this-&amp;gt;data['Attachment']['file']['name']);&lt;br /&gt;&lt;br /&gt;        # assignkan uploaded data ke bentuk cakephp&lt;br /&gt;        $this-&amp;gt;data['Attachment']['data'] = $filedata;&lt;br /&gt;        $this-&amp;gt;data['Attachment']['name'] = $filename;&lt;br /&gt;        $this-&amp;gt;data['Attachment']['size'] = $this-&amp;gt;data['Attachment']['file']['size'];&lt;br /&gt;        $this-&amp;gt;data['Attachment']['type'] = $this-&amp;gt;data['Attachment']['file']['type'];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        # save ke dalam database&lt;br /&gt;        if($this-&amp;gt;Attachment-&amp;gt;save($this-&amp;gt;data)){&lt;br /&gt;          $this-&amp;gt;Session-&amp;gt;setFlash('Berjaya save ke database');&lt;br /&gt;        } else {&lt;br /&gt;          $this-&amp;gt;Session-&amp;gt;setFlash('Gagal save ke database');&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }else{&lt;br /&gt;      # fail tidak wujud dan beri mesej&lt;br /&gt;      $this-&amp;gt;Session-&amp;gt;setFlash('Tiada fail dikesan !');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;Sekarang, anda boleh mencuba untuk upload sebarang jenis fail dan kemudian lihat kandungan fail tersebut di dalam database menggunakan phpMyAdmin.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMSLAMTiap8/SrG-tvCxzDI/AAAAAAAAAyo/bGdPGBLluZY/s1600-h/phpmyadmin.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SrG-tvCxzDI/AAAAAAAAAyo/bGdPGBLluZY/s400/phpmyadmin.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&amp;nbsp;Jika anda berjaya melihat kandungan data tersebut di dalam PhpMyAdmin, anda telah berjaya ! Tahniah.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #274e13;"&gt;&lt;span style="font-size: large;"&gt;Langkah ke-tujuh : Paparkan senarai fail&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Dalam siri di atas, kita telah berjaya upload fail ke dalam database MySQL. Seterusnya, kita akan buat sistem paparan menggunakan ORM CakePHP. Ubahsuai kod action index seperti berikut&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;# untuk paparkan senarai fail&lt;br /&gt;  # untuk upload fail&lt;br /&gt;  function index(){&lt;br /&gt;    # melihat kandungan fail&lt;br /&gt;    debug($this-&amp;gt;data);&lt;br /&gt;    if( $this-&amp;gt;data &amp;amp;&amp;amp;&lt;br /&gt;        is_uploaded_file($this-&amp;gt;data['Attachment']['file']['tmp_name']) ){&lt;br /&gt;&lt;br /&gt;        # fail wujud dan file dah upload, kita nak baca bentuk binari&lt;br /&gt;        # untuk simpan dalam database&lt;br /&gt;        $filedata = fread(fopen($this-&amp;gt;data['Attachment']['file']['tmp_name'], "r"),&lt;br /&gt;                                     $this-&amp;gt;data['Attachment']['file']['size']);&lt;br /&gt;&lt;br /&gt;        # untuk beri nama kepada fail&lt;br /&gt;        $filename = basename($this-&amp;gt;data['Attachment']['file']['name']);&lt;br /&gt;&lt;br /&gt;        # assignkan uploaded data ke bentuk cakephp&lt;br /&gt;        $this-&amp;gt;data['Attachment']['data'] = $filedata;&lt;br /&gt;        $this-&amp;gt;data['Attachment']['name'] = $filename;&lt;br /&gt;        $this-&amp;gt;data['Attachment']['size'] = $this-&amp;gt;data['Attachment']['file']['size'];&lt;br /&gt;        $this-&amp;gt;data['Attachment']['type'] = $this-&amp;gt;data['Attachment']['file']['type'];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        # save ke dalam database&lt;br /&gt;        if($this-&amp;gt;Attachment-&amp;gt;save($this-&amp;gt;data)){&lt;br /&gt;          $this-&amp;gt;Session-&amp;gt;setFlash('Berjaya save ke database');&lt;br /&gt;        } else {&lt;br /&gt;          $this-&amp;gt;Session-&amp;gt;setFlash('Gagal save ke database');&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }else{&lt;br /&gt;      # fail tidak wujud dan beri mesej&lt;br /&gt;      $this-&amp;gt;Session-&amp;gt;setFlash('Tiada fail dikesan !');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    # senaraikan fail yang disimpan dalam database&lt;br /&gt;    $options = array(&lt;br /&gt;                  # hanya keluarkan field yang perlu sahaja&lt;br /&gt;                  'fields' =&amp;gt; array('id','name','type','size','created'),&lt;br /&gt;                  # buat susunan supaya order by id DESC&lt;br /&gt;                  'order' =&amp;gt; 'id DESC'&lt;br /&gt;                   );&lt;br /&gt;    # laksanakan arahan carian dan beri nilai ke variable $attachments&lt;br /&gt;    $attachments = $this-&amp;gt;Attachment-&amp;gt;find('all',$options);&lt;br /&gt;&lt;br /&gt;    # setkan nilai ke index.ctp&lt;br /&gt;    $this-&amp;gt;set(compact('attachments'));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Kemudian, ubahsuai kod app/views/attachments/index.ctp untuk masukkan kod untuk tujuan penyenaraian fail&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?= $form-&amp;gt;create('Attachment', array('type' =&amp;gt; 'file')); ?&amp;gt;&lt;br /&gt;&amp;lt;?= $form-&amp;gt;file('file'); ?&amp;gt;&lt;br /&gt;&amp;lt;?= $form-&amp;gt;end('Muat Naik'); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;? if(isset($attachments)): ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&amp;lt;? foreach($attachments as $a): ?&amp;gt;&lt;br /&gt;&lt;li&gt;  &amp;lt;?= $html-&amp;gt;link($a['Attachment']['name'], array('action' =&amp;gt; 'download', $a['Attachment']['id'])); ?&amp;gt;   [   &amp;lt;?= round($a['Attachment']['size']/1000); ?&amp;gt; kb    ]   &amp;lt;?= $html-&amp;gt;link('Padam', array('action' =&amp;gt; 'delete', $a['Attachment']['id'])); ?&amp;gt; &lt;/li&gt;&lt;br /&gt;&amp;lt;? endforeach; ?&amp;gt; &lt;/ul&gt;&amp;lt;? endif; ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Cuba upload beberapa fail dan hasilnya adalah seperti berikut :&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_PMSLAMTiap8/SrHDcg_d7wI/AAAAAAAAAyw/xUYOw5qSvR8/s1600-h/listing.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_PMSLAMTiap8/SrHDcg_d7wI/AAAAAAAAAyw/xUYOw5qSvR8/s400/listing.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Jika anda berjaya melihat paparan seperti di atas, tahniah sekali lagi. Anda telah berjaya membuat sistem senarai fail. Jika anda lihat kod di dalam index.ctp, saya menggunakan arahan&lt;span style="color: red;"&gt; Foreach()&lt;/span&gt; dan &lt;span style="color: red;"&gt;endForeach() &lt;/span&gt;untuk menyenaraikan data yang terkandung di dalam variable &lt;b&gt;$attachments&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #274e13; font-size: large;"&gt;&lt;b&gt;Langkah ke-lapan : action download()&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Jika anda klik pautan nama fail di action index, anda akan mendapat ralat Missing View. Fungsi action download() ialah untuk mengeluarkan data dari database dan kemudiannya pengguna akan download fail yang mereka pilih dalam format yang sama. jadi untuk itu kita perlu ubahsuai action download() di dalam Attachments Controller. Sila lihat kod di bawah:&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;# untuk membolehkan fail download dari database&lt;br /&gt;  # id akan digunakan sebagai identifier&lt;br /&gt;  function download($id = null){&lt;br /&gt;    # cari fail berdasarkan id yang diberi&lt;br /&gt;    $file = $this-&amp;gt;Attachment-&amp;gt;findById($id);&lt;br /&gt;&lt;br /&gt;    if($file){&lt;br /&gt;      # fail wujud, laksanakan arahan download&lt;br /&gt;      header('Content-type: ' . $file['Attachment']['type']);&lt;br /&gt;      header('Content-length: ' . $file['Attachment']['size']);&lt;br /&gt;      header('Content-Disposition: attachment; filename='.$file['Attachment']['name']);&lt;br /&gt;      echo $file['Attachment']['data'];&lt;br /&gt;      exit();&lt;br /&gt;    } else {&lt;br /&gt;      # fail tidak wujud, bagi mesej dan redirect ke index&lt;br /&gt;      $this-&amp;gt;Session-&amp;gt;setFlash('Fail tidak wujud');&lt;br /&gt;      $this-&amp;gt;redirect(array('action' =&amp;gt; 'index'));&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Kod di atas telah diberi komen, anda boleh memahaminya dengan membaca komen di atas. Untuk menguji sistem di atas, sila ke action index, http://localhost/attachments/index dan klik pautan nama fail tersebut, sepatutnya anda akan dapat dialog untuk download fail tersebut ke dalam komputer seperti gambar di bawah&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMSLAMTiap8/SrHH1eJYxkI/AAAAAAAAAy4/CabviFvpckg/s1600-h/download.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SrHH1eJYxkI/AAAAAAAAAy4/CabviFvpckg/s400/download.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Jika anda berjaya mendapat paparan seperti di atas, tahniah, anda telah berjaya membuat sistem untuk download fail dari database.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;span style="color: #274e13;"&gt;Langkah ke-sembilan : Sistem padam fail dari database&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Ini adalah langkah terakhir di dalam tutorial ini, sistem untuk memadam fail dari database. Ubahsuai action delete() di dalam Attachments Controller seperti berikut&lt;br /&gt;&lt;br /&gt;&lt;pre class="php" name="code"&gt;# untuk padam fail dalam database&lt;br /&gt;  function delete($id = null){&lt;br /&gt;    if($id){&lt;br /&gt;      $file = $this-&amp;gt;Attachment-&amp;gt;del($id);&lt;br /&gt;      if($file){&lt;br /&gt;        $this-&amp;gt;Session-&amp;gt;setFlash('Berjaya padam');&lt;br /&gt;      }else{&lt;br /&gt;        $this-&amp;gt;Session-&amp;gt;setFlash('Gagal untuk dipadam');&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    # kembali ke action index&lt;br /&gt;    $this-&amp;gt;redirect(array('action' =&amp;gt; 'index'));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Cuba anda klik pautan padam dan jika anda mendapat mesej seperti gambar di bawah, anda berjaya.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMSLAMTiap8/SrHJmM_R3hI/AAAAAAAAAzA/mDBoXViAs4U/s1600-h/padam.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SrHJmM_R3hI/AAAAAAAAAzA/mDBoXViAs4U/s400/padam.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Kod penuh attachments_controller.php&lt;br /&gt;&lt;pre class="php" name="code"&gt;&amp;lt;?php&lt;br /&gt;class AttachmentsController extends AppController {&lt;br /&gt;&lt;br /&gt; var $name = 'Attachments';&lt;br /&gt; #var $scaffold;&lt;br /&gt;&lt;br /&gt;  # untuk paparkan senarai fail&lt;br /&gt; # untuk upload fail&lt;br /&gt; function index(){&lt;br /&gt;    # melihat kandungan fail&lt;br /&gt;    #debug($this-&amp;gt;data);&lt;br /&gt;    if( $this-&amp;gt;data &amp;amp;&amp;amp;&lt;br /&gt;        is_uploaded_file($this-&amp;gt;data['Attachment']['file']['tmp_name']) ){&lt;br /&gt;   &lt;br /&gt;       # fail wujud dan file dah upload, kita nak baca bentuk binari&lt;br /&gt;        # untuk simpan dalam database&lt;br /&gt;        $filedata = fread(fopen($this-&amp;gt;data['Attachment']['file']['tmp_name'], "r"),&lt;br /&gt;                                     $this-&amp;gt;data['Attachment']['file']['size']);&lt;br /&gt;&lt;br /&gt;    # untuk beri nama kepada fail&lt;br /&gt;    $filename = basename($this-&amp;gt;data['Attachment']['file']['name']);&lt;br /&gt;&lt;br /&gt;        # assignkan uploaded data ke bentuk cakephp&lt;br /&gt;        $this-&amp;gt;data['Attachment']['data'] = $filedata;&lt;br /&gt;        $this-&amp;gt;data['Attachment']['name'] = $filename;&lt;br /&gt;        $this-&amp;gt;data['Attachment']['size'] = $this-&amp;gt;data['Attachment']['file']['size'];&lt;br /&gt;        $this-&amp;gt;data['Attachment']['type'] = $this-&amp;gt;data['Attachment']['file']['type'];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        # save ke dalam database&lt;br /&gt;        if($this-&amp;gt;Attachment-&amp;gt;save($this-&amp;gt;data)){&lt;br /&gt;          $this-&amp;gt;Session-&amp;gt;setFlash('Berjaya save ke database');&lt;br /&gt;        } else {&lt;br /&gt;          $this-&amp;gt;Session-&amp;gt;setFlash('Gagal save ke database');&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;  }else{&lt;br /&gt;      # fail tidak wujud dan beri mesej&lt;br /&gt;   #$this-&amp;gt;Session-&amp;gt;setFlash('Tiada fail dikesan !');&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    # senaraikan fail yang disimpan dalam database&lt;br /&gt;  $options = array(&lt;br /&gt;         # hanya keluarkan field yang perlu sahaja&lt;br /&gt;         'fields' =&amp;gt; array('id','name','type','size','created'),&lt;br /&gt;         # buat susunan supaya order by id DESC&lt;br /&gt;                  'order' =&amp;gt; 'id DESC'&lt;br /&gt;                   );&lt;br /&gt;  # laksanakan arahan carian dan beri nilai ke variable $attachments&lt;br /&gt;    $attachments = $this-&amp;gt;Attachment-&amp;gt;find('all',$options);&lt;br /&gt;  &lt;br /&gt;    # setkan nilai ke index.ctp&lt;br /&gt;    $this-&amp;gt;set(compact('attachments'));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; # untuk membolehkan fail download dari database&lt;br /&gt; # id akan digunakan sebagai identifier&lt;br /&gt;  function download($id = null){&lt;br /&gt;  # cari fail berdasarkan id yang diberi&lt;br /&gt;    $file = $this-&amp;gt;Attachment-&amp;gt;findById($id);&lt;br /&gt;&lt;br /&gt;  if($file){&lt;br /&gt;   # fail wujud, laksanakan arahan download&lt;br /&gt;     header('Content-type: ' . $file['Attachment']['type']);&lt;br /&gt;     header('Content-length: ' . $file['Attachment']['size']);&lt;br /&gt;     header('Content-Disposition: attachment; filename='.$file['Attachment']['name']);&lt;br /&gt;     echo $file['Attachment']['data'];&lt;br /&gt;     exit();&lt;br /&gt;  } else {&lt;br /&gt;   # fail tidak wujud, bagi mesej dan redirect ke index&lt;br /&gt;      $this-&amp;gt;Session-&amp;gt;setFlash('Fail tidak wujud');&lt;br /&gt;   $this-&amp;gt;redirect(array('action' =&amp;gt; 'index'));&lt;br /&gt;  }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; # untuk padam fail dalam database&lt;br /&gt;  function delete($id = null){&lt;br /&gt;    if($id){&lt;br /&gt;      $file = $this-&amp;gt;Attachment-&amp;gt;del($id);&lt;br /&gt;   if($file){&lt;br /&gt;       $this-&amp;gt;Session-&amp;gt;setFlash('Berjaya padam');&lt;br /&gt;   }else{&lt;br /&gt;       $this-&amp;gt;Session-&amp;gt;setFlash('Gagal untuk dipadam');&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  # kembali ke action index&lt;br /&gt;    $this-&amp;gt;redirect(array('action' =&amp;gt; 'index'));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&amp;nbsp;&lt;/pre&gt;&lt;br /&gt;Sambungan siri ini ,&lt;a href="http://dunia-aturcara.blogspot.com/2009/09/cakephp-membina-pagination-seperti.html"&gt; Membuat Pagination dan Custom Layout&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-708751220825904974?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/708751220825904974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakephp-membina-sistem-attachments-yang.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/708751220825904974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/708751220825904974'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/cakephp-membina-sistem-attachments-yang.html' title='CakePHP : Membina sistem &quot;attachments&quot; yang mudah'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_PMSLAMTiap8/SrHL7Q4BtzI/AAAAAAAAAzQ/V6HPJUpY7hQ/s72-c/pengurusan-fail.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-1806198496505518564</id><published>2009-09-16T07:53:00.000-07:00</published><updated>2009-09-18T07:18:08.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ror'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><title type='text'>ROR: Bina sistem pengurusan pekerja : Siri 1</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrD-HOjx3YI/AAAAAAAAAyI/nQ2U7h_yiHA/s1600-h/port3000.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrD-HOjx3YI/AAAAAAAAAyI/nQ2U7h_yiHA/s400/port3000.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Senario&lt;/b&gt;&lt;br /&gt;Bos anda memerlukan satu sistem yang membolehkan dia mengurus pekerja-pekerja syarikatnya mengikut "department". Setiap pekerja akan di"group" kaan mengikut department. Bos anda boleh menambah,mengubahsuai, melihat senarai dan juga memadam data pekerja menggunakan "web browser"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Penyelesaian&lt;/b&gt;&lt;br /&gt;Anda akan menggunakan Ruby On Rails versi 2.3.3 untuk bahasa aturcara utama dan menggunakan MySQL sebagai server untuk storan data yang digunakan. 1 database akan dicipta dan dinamakan "&lt;b&gt;employees_development&lt;/b&gt;" dan ia akan mempunyai 2 table, iaitu "&lt;b&gt;employees&lt;/b&gt;" dan "&lt;b&gt;departments&lt;/b&gt;".&lt;br /&gt;&lt;br /&gt;Saya akan menggunakan konfigurasi seperti berikut :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Folder projek c:\ror_projects\employees&lt;/li&gt;&lt;li&gt;MySQL username = root password = &lt;tiada&gt;&lt;/tiada&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Langkah 1 : Bina projek bernama "employees" di c:\ror\projects&lt;/b&gt;&lt;br /&gt;Buka konsol MS-DOS prompt dan taip arahan berikut &lt;br /&gt;&lt;ol&gt;&lt;li&gt;cd c:\ror_projects&lt;/li&gt;&lt;li&gt;rails -d mysql employees&lt;/li&gt;&lt;/ol&gt;Arahan di atas akan menyebabkan Ruby on Rails membina projek bernama "&lt;b&gt;employees&lt;/b&gt;" di folder yang ditetapkan iaitu &lt;b&gt;c:\ror_projects&lt;/b&gt;. Contoh arahan, sila lihat gambar di bawah:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_PMSLAMTiap8/SrD7kvpZ6gI/AAAAAAAAAx4/qda1vDQ3DK4/s1600-h/rails_project.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_PMSLAMTiap8/SrD7kvpZ6gI/AAAAAAAAAx4/qda1vDQ3DK4/s400/rails_project.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Seterusnya, kita akan menghidupkan "mongrel", ia adalah web server untuk Ruby on Rails. Secara "default" , mongrel akan menjalankan tugas sebagai "web server" di port 3000. Untuk menjalankan server untuk projek "employees". Laksanakan arahan berikut&lt;br /&gt;&lt;ol&gt;&lt;li&gt;cd c:\ror_projects\employees&lt;/li&gt;&lt;li&gt;ruby script/server&lt;/li&gt;&lt;/ol&gt;Lihat '&lt;b&gt;screenshot&lt;/b&gt;' di bawah :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_PMSLAMTiap8/SrD8_uFEduI/AAAAAAAAAyA/TOF2YsfMQ0I/s1600-h/mongrel.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_PMSLAMTiap8/SrD8_uFEduI/AAAAAAAAAyA/TOF2YsfMQ0I/s400/mongrel.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;Anda akan dapat melihat paparan seperti di atas. Konsol MS-Dos di atas akan berfungsi sebagai &lt;b&gt;web server&lt;/b&gt; dan juga &lt;b&gt;debugger&lt;/b&gt;. Untuk menguji samada mongrel telah berjaya menjalankan tugasnya, sila buka pelayar web &lt;b&gt;Mozilla Firefox&lt;/b&gt; atau &lt;b&gt;Microsoft Internet Explorer&lt;/b&gt; dan buka alamat &lt;b&gt;http://localhost:3000&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Hasilnya akan seperti gambar rajah di bawah&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_PMSLAMTiap8/SrD-HOjx3YI/AAAAAAAAAyI/nQ2U7h_yiHA/s1600-h/port3000.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_PMSLAMTiap8/SrD-HOjx3YI/AAAAAAAAAyI/nQ2U7h_yiHA/s400/port3000.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Jika anda berjaya sampai ke tahap ini, bermakna anda telah berjaya menjalankan aplikasi pertama Ruby on Rails anda ! Tahniah.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Siri seterusnya, saya akan mengajar anda untuk mengkonfigurasi database. Jika ada masalah atau pertanyaan, sila gunakan ruangan komen di bawah.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://dunia-aturcara.blogspot.com/2009/09/ror-bina-sistem-pengurusan-pekerja-siri.html"&gt;Siri 2 telah diterbitkan&lt;/a&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-1806198496505518564?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/1806198496505518564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/bina-sistem-pengurusan-pekerja-siri-1.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/1806198496505518564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/1806198496505518564'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/bina-sistem-pengurusan-pekerja-siri-1.html' title='ROR: Bina sistem pengurusan pekerja : Siri 1'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_PMSLAMTiap8/SrD-HOjx3YI/AAAAAAAAAyI/nQ2U7h_yiHA/s72-c/port3000.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-725983186717296243.post-7395978965961886361</id><published>2009-09-16T07:17:00.000-07:00</published><updated>2009-09-16T19:39:10.601-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby on rails'/><category scheme='http://www.blogger.com/atom/ns#' term='instant rails'/><title type='text'>ROR: Alternatif kepada PHP, Ruby On Rails : Siri 1</title><content type='html'>&lt;a href="http://www.rubyonrails.org/"&gt;Ruby On Rails&lt;/a&gt; adalah satu "framework" yang tujuan dicipta untuk memudahkan membuat applikasi berasaskan web dengan mudah,selamat,teratur dan cepat.&lt;br /&gt;&lt;br /&gt;Saya akan membuat tutorial asas menggunakan Ruby On Rails menggunakan platform Windows XP dan menggunakan MS-DOS Prompt untuk melaksanakan arahan "console".&lt;br /&gt;&lt;br /&gt;Jadi sebelum itu, pastikan anda telah berjaya "install" persekitaran Ruby On Rails menggunakan "Instant Rails". Anda boleh melihat video di bawah tentang cara-cara untuk "install" di dalam platform Windows.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xbKV1sndLGo&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/xbKV1sndLGo&amp;amp;color1=0xb1b1b1&amp;amp;color2=0xcfcfcf&amp;amp;feature=player_embedded&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Atau ,&amp;nbsp; &lt;a href="http://cachefly.oreilly.com/broadcast/2008/12/InstantRails.mov"&gt;muat turun di sini&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;rujukan&lt;/b&gt;&lt;/span&gt;, saya menggunakan perisian berikut :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ruby on Rails versi 2.3.3&lt;/li&gt;&lt;li&gt;Ruby versi 1.8.6&lt;/li&gt;&lt;li&gt;MySQL versi&amp;nbsp; 6&lt;/li&gt;&lt;li&gt;Crimson Text Editor&lt;/li&gt;&lt;li&gt;Mozilla Firefox&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Download Instant Rails 2.0 di sini , &lt;a href="http://rubyforge.org/frs/download.php/29867/InstantRails-2.0-win.zip"&gt;http://rubyforge.org/frs/download.php/29867/InstantRails-2.0-win.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/725983186717296243-7395978965961886361?l=dunia-aturcara.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dunia-aturcara.blogspot.com/feeds/7395978965961886361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/alternatif-kepada-php-ruby-on-rails.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/7395978965961886361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/725983186717296243/posts/default/7395978965961886361'/><link rel='alternate' type='text/html' href='http://dunia-aturcara.blogspot.com/2009/09/alternatif-kepada-php-ruby-on-rails.html' title='ROR: Alternatif kepada PHP, Ruby On Rails : Siri 1'/><author><name>bazet</name><uri>http://www.blogger.com/profile/07257188874193060703</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_PMSLAMTiap8/SQpdu5_m3lI/AAAAAAAAAco/lB6tUgRdGdw/S220/art.jpg'/></author><thr:total>0</thr:total></entry></feed>
