【ajaxSuggest】CakePHPで利用するには


【最終更新:2012年08月19日】
CakePHP1.3 + ajaxSuggest1.5.4 + SQLite2 の組み合わせの"app"フォルダを公開しています。
下記からダウンロードできます。
(CakePHP)/nations/index へアクセスしてください。
http://www.usamimi.info/~sutara/download/ajaxSuggestForCakePHP.zip


jquery.ajaxSuggest
バージョン1.3〜


CakePHP 1.3.2】


プラグインを設置するレイアウト(default.ctp)】
<head>
<?php
echo $html->css('jquery.ajaxSuggest');
echo $javascript->link('jquery-1.4.2.min');
echo $javascript->link('jquery.ajaxSuggest.1.3');
?>
<script type="text/javascript">
jQuery(document).ready(function($){
$('#example').ajaxSuggest(
'<?php echo $this->webroot ?>hoges/ajaxSuggest',
{'database':['0']}
)
});
</script>
</head>
<body>
<?php echo $form->text('piyo', array('id'=>'example')) ?>
</body>


【コントローラ(hoge_controller.php)】
function ajaxSuggest(){
$this->layout = 'ajax';

$db_settings = array(
array('table'=>'Hoge', 'field'=>'fuga', 'order'=>'id')
);
$limit = $this->params['url']['limit'];
$order_by = $this->params['url']['order_by'];
$database = $this->params['url']['database'];

//全角空白でもトリム
$q_word = trim(mb_convert_kana($this->params['url']['q_word'], 's'));
$q_word = preg_split('/[ \t\n\r]+/u', $q_word);

//----------------------------------------------------
// findのパラメータをひとつずつ作成
//----------------------------------------------------
//field,conditions======================
$conditions = array();
$full_field;
foreach($database as $num){
$full_field = "{$db_settings[$num]['table']}.{$db_settings[$num]['field']}";
$field[] = $full_field;
foreach($q_word as $q){
$conditions['OR'][] = array("$full_field LIKE"=>"%$q%");
}
}
//order======================
$order = array();
$count = 0;
$order[0] = "(CASE ";
foreach($database as $num){
foreach($q_word as $q){
$order[0] .= "WHEN $full_field LIKE '$q%' THEN $count ";
$count++;
}
}
$order[0] .= "ELSE $count END) ";
foreach($database as $db){
$order[] = "$full_field $order_by";
}
//パラメータを設定======================
$params = array(
'field' =>$field,
'conditions'=>$conditions,
'order' =>$order,
'limit' =>$limit,
'recursive' =>0
);

//----------------------------------------------------
// DB問い合わせ。JSON
//----------------------------------------------------
$data = $this->Model->find('all', $params);
$simple_data = array();
foreach($data as $val){
$simple_data[] = $val['Model']['field'];
}
$this->set('json', json_encode($simple_data));
}


Ajax通信の結果を返すビュー(ajax_suggest.ctp】
<?php echo $json ?>