我想知道,如何在cakephp 2中创建自动完成功能。我在互联网上阅读,但我无法找到有关我的部分的相关信息。
目前我首先在控制器上加载所有数据,分配给视图然后从所有数据开始自动完成。但这样做效率不高,需要时间,因为数据可能很多。如何过滤控制器功能只加载输入上的关键字i类型?我可以在PHP级别上执行此操作,但我知道如何在cakephp 2上。
这是我在cakephp 2上的当前代码:
productcontroller这会加载商店上的所有产品:
$storeproducts = $this->get_storeproduct_autocomplete($sale['Sale']['store_id']);
这是我认为的输入:
<input type="text" class="form-control" placeholder="Barcode/Nama barang..." name="search_keyword" id="searchProduct" />
在视图的底部我放了脚本:
$(function() {
var availableProduct = [
<?php
foreach ($products as $spro):
$label = addslashes($spro['Product']['barcode'].' '.$spro['Product']['product_name']);
?>
{ label:"<?php echo $label;?>", value:"<?php echo $spro['Product']['barcode'];?>" },
<?php
endforeach;
unset($spro);
?>
];
$( "#searchProduct" ).autocomplete({
source: availableProduct,
delay: 200,
minLength: 2
});
});
通过使用这些代码,自动完成功能正常,但它首先加载整个记录,而不是我输入的过滤器。并且输入字段用条形码填充,或者我设置的任何值,但我希望它显示产品名称,当我提交时,它有产品ID,我们可以这样做吗?
编辑1: 更新我的控制器,创建新函数来执行通过ajax调用的数据过滤器:
public function ajax_get_autocomplete_storeproduct($keyword, $store_id)
{
$result = array();
$storeproducts = $this->StoreProduct->find('all', array(
'fields'=>array('StoreProduct.id', 'StoreProduct.stok'),
'conditions'=>array('Product.deleted'=>0,
'StoreProduct.stok >'=>0,
'StoreProduct.store_id'=>$store_id,
'OR'=>array(
'Product.barcode LIKE' => "%$keyword%",
'Product.product_name LIKE' => "%$keyword%",
)
)));
//how to set the value to view ?
return new CakeResponse(array('body'=>json_encode($result)));
}
如何设置密钥:ajax从控制器到数据响应的值?
答案 0 :(得分:1)
你可以做的是,你可以在自动完成中调用ajax函数。所以在页面加载时,你不必做任何事情。但是在键类型上,将调用ajax函数。
$("#searchProduct").autocomplete({
source: function (request, response) {
$.ajax({
url: "add url for function call in ajax",
dataType: "json",
type: "post",
data: {key: value},// if you want to send any values to ajax call, you can do it here.
success: function (data) {
response(data);
}
});
},
minLength: 2,
delay: 200// im not sure why u need delay.
});
在ajax调用的函数中,在那里填充数组并使用echo json_encode($array);
以json格式回显数组。它会起作用。
修改强>
您的控制器功能应如下所示
function products() {
$array[0]['name'] = "Product - 1";
$array[0]['price'] = 100;
$array[1]['name'] = "Product - 2";
$array[1]['price'] = 200;
// like above populate all your products in to an array.
// at last add this line
echo json_encode($array);// this will generate key: value what you asked.
}