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


User search all by Category dan Paginated. Cuba klik gambar dan lihat URL

User Search 'title' dan pilih All Category



User Search 'title' dan pilih Category 'Public' dan Paginated

Query dibawa menggunakan URL serta CategoryId

Teknik dalam Controller
-------------------------------------
Contoh Full Code posts_controller.php
1. Search query dan category_id dihantar ke action Search menggunakan method $_POST
2. Dalam Search Controller kena buat conditional checking samaada Query dihantar menggunakan $_POST atau $this->PassedArgs ?
3. Nilai akhir $query dan $category_id digunakan untuk Search function

Teknik dalam Paginator
------------------------------------
1. Search.ctp akan keluarkan result dia mempunyai result. Untuk memaksima usability, Pagination di asingkan dari Search.ctp dan diletakkan di dalam views/elements/paging.ctp
2. Dalam paging.ctp kena buat conditional checking untuk URL options

Contoh paging.ctp

Contoh search.ctp



Copyright
Azril Nazli Alias
CakePHP Trainer
019 3718462

Tiada ulasan:

Catat Ulasan