2017-06-09 105 views
0

我想知道,如何在cakephp 2中創建自動完成。我在網上閱讀,但我找不到有關我的部分的相關信息。自動完成Ajax上cakephp 2

當前我先在控制器中加載所有數據,分配給視圖,然後從所有數據開始自動完成。但由於數據可能很多,這樣效率不高,需要時間。我怎麼能過濾控制器功能加載只關鍵字我輸入類型?我能夠做到這一點PHP的水平,但我dunt知道如何介紹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))); 
    } 

如何設置的關鍵:從數值控制器在阿賈克斯數據響應?

+0

您可以使用自動完成引導是 –

+0

有文檔頁面是什麼? – Gabriel

回答

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. 
} 
+0

IC ..但我怎麼能發送數據格式的鍵:從控制器的價值? *我更新我的問題qith更新的控制器代碼?只是在控制器上找到列表? – Gabriel

+0

@Gabriel,檢查我的編輯。 –

+0

自動完成功能無法正常工作,我們是否需要圖書館來做到這一點?而不是jQuery – Gabriel