Memaparkan catatan dengan label tutorial. Papar semua catatan
Memaparkan catatan dengan label tutorial. Papar semua catatan

Jumaat, 30 Julai 2010

CakePHP : Menggunakan Shell dan Folder Utility

Bayangkan anda perlu memproses log fail dari Apache Access Log dan System Admin telah membuat rotation. Setiap log file mempunyai beratus ribu row, dan ada mempunyai beratus-ratus file yang perlu diproses .....

Setup Cake CLI dalam Windows
===================================================
1. Copy fail APP/cake/console/cake.bat ke dalam c:\WINDOWS\cake.bat
c:\windows\cake.bat ( pastikan setting anda betul )

/usr/bin/cake di dalam Linux CentOS


Memperkenalkan CakePHP Shell CLI dan Folder Utility
===================================================
 Untuk mengikuti tutorial ini, pastikan anda boleh melaksanakan arahan cake bake.

1. Cipta fail APP/vendors/shell/proses_data.php
class ProsesDataShell extends Shell {

  function main() {
    $this->out('Hello World!');
  } 
}
?>

2. Mari kita cuba run fail tersebut di dalam APP. Laksanakan arahan berikut
cake proses_data

Hasilnya :



Paparan Hello World berjaya dikeluarkan menggunakan arahan $this->out('Hello World');. Di dalam fail proses_data.php, Convention yang perlu diikuti ialah, nama Class mesti dalam berbentuk camelCase. Contohnya :
1. class ProsesData extends Shell
2. class UserManagement extends Shell
3. class FetchFile extends Shell

Nama fail mesti mengikut format variable kepada nama Class, contohnya
1. proses_data.php
2. user_management.php
3. fetch_file.php

Dan fail-fail ini mesti disimpan di dalam folder APP/vendors/shell/*

Method main() di dalam file tersebut akan dijalankan secvara automatik.


Cipta Sistem Dialog
==========================================
class ProsesDataShell extends Shell {

  function main() {

    $this->out('Hello World!');

    $this->hr();

    $path = null;
    while (!is_dir($path)) {
      $path = $this->;in('Directory :');
      if (!is_dir($path)){
       $this->out('Invalid directory!');
      }else{
       $this->out('Valid directory!');
      }
    }
  }
} 
?> 

Save fail proses_data.php dan run kembali. Hasilnya, anda akan dapat dialog samaada Valid directory atau Invalid Directory.

$this->hr() akan paparkan line seperator
$this->in() akan menerima input dari user



Memperkenalkan Folder Utility
Seterusnya, saya ingin listkan semua fail dalam direktori yang dinyatakan. Jadi saya perlu import utility class bernama Folder
class ProsesDataShell extends Shell {

  function main() {

    $this->out('Hello World!');

    $this->hr();

    $path = null;
    while (!is_dir($path)) {
      $path = $this->in('Directory :');
      if (!is_dir($path)){
       $this->out('Invalid directory!');
      } else {
       $this->out('Valid directory!');

       # senaraikan fail dalam direktori
        uses('Folder');
        $folder =& new Folder();
        # read directory
        $folder = new Folder($path);
        $files = $folder->read();
        foreach($files as $f){
                foreach($f as $k => $v ){
                        # only show we_access
                        $this->out($v);
                }
        }
      }
    }
  }
}
?>

Save fail di atas, dan cuba run.

Sekian setakqat ini tutorial menggunakan CakePHP Shell dan Folder

Selasa, 27 Julai 2010

CakePHP Search Filtering


Tadi masa training @ PMO, saya membuat contoh Search Engine menggunakan model Post dan Category.


Schema Post
---------------------------------
id |title |created | modified

Schema Post
---------------------------------
id | category_id | title | contents | created | modified

Relations
----------------------------------
Post belongsTo Category
Category hasMany Post

Strategi untuk Search
----------------------------------
1. User boleh search by keyword tanpa pilih Category. Akan return semua data
2. User boleh search by keyword tapi terhad kepada Category tertentu
3. Guna wildcard  OR dan AND serentak. AND digunakan jika nilai $category_id dikesan
4. Pagination digunakan hasil carian dan bawa keyword menggunakan URL

 Screen Shots
----------------------------------
User boleh search by Category atau All data tanpa isi Query. Data paginated