使用链接蛋糕php3

时间:2017-07-05 12:55:44

标签: javascript ajax cakephp-3.0

我试图根据其他选择选项数据从select加载数据,所以我使用了Chained的想法,但是我在获取相关数据时遇到了问题,我已经在我的观点:

  echo $this->Form->input('warehouse_categories_items_id', ['options' => $warehouseCategoriesItems,'class' => 'form-control','id'=>'type']);
                                    echo $this->Form->input('warehouse_items_id', ['options' => $warehouseItems, 'class' => 'form-control','id'=>'item','data-chained'=>$query]);


<script type="text/javascript">
$(document).ready(function () {
    $("#item").chainedTo("#type");
});

并在我的控制器上:

 $query = $this->WarehouseAddOrdersItemsForm7->find('all')
    ->contain([ 'WarehouseCategoriesItems', 'WarehouseItems' => function($q){
        return $q->where(['WarehouseItems.warehouse_categories_items_id' => 'WarehouseCategoriesItems.id']);
    }]);
$warehouseCategoriesItems = $this->WarehouseAddOrdersItemsForm7->WarehouseCategoriesItems->find('list', ['valueField' => 'category_item_name','limit' => 200]);
     $warehouseItems = $this->WarehouseAddOrdersItemsForm7->WarehouseItems->find('list', ['valueField' => 'warehouse_item_name','limit' => 200]);

但它只获取我的第一个选择选项数据,而不是获取第二个相关数据。

1 个答案:

答案 0 :(得分:0)

如果你想使用级联选择,你有两种方法: -

  
      
  1. 本地(提供所有数据以选择选项)
  2.   
  3. 远程(将向服务器请求选项然后将选项附加/添加到选择)
  4.   

我将为您提供每个方式的示例和步骤: -

本地:-(不在CakePHP中编写代码以便您能够正确理解)

<select id="mark" name="mark">
  <option value="">--</option>
  <option value="bmw">BMW</option>
  <option value="audi">Audi</option>
</select>

<select id="series" name="series">
  <option value="">--</option>
  <option value="series-3" data-chained="bmw">3 series</option>
  <option value="series-5" data-chained="bmw">5 series</option>
  <option value="series-6" data-chained="bmw">6 series</option>
  <option value="a3" data-chained="audi">A3</option>
  <option value="a4" data-chained="audi">A4</option>
  <option value="a5" data-chained="audi">A5</option>
</select>  

请注意,在数据链中,您必须编写父选择值,以便选择父级,以便它只显示相关的子选项。

远程/服务器(如果您想使用服务器过滤器): -

您必须通过AJAX向服务器请求,例如

<select id="mark" name="mark">
<option value="">--</option>
<option value="bmw">BMW</option>
<option value="audi">Audi</option>
</select>
<select id="series" name="series">
<option value="">--</option>
</select>
<select id="model" name="model">
<option value="">--</option>
</select>
<select id="engine" name="engine">
<option value="">--</option>
</select>

第一个选择框,其中包含值,另一个选择为空(数据将在服务器响应后绑定)

$("#series").remoteChained({
  parents : "#mark",
  url : "series/optionData"
});

$("#model").remoteChained({
  parents : "#series",
  url : "models/optionData"
});

$("#engine").remoteChained({
  parents : "#series, #model",
  url : "engines/optionData"
}); 

在Controller的方法optionData中,如果必须以JSON格式发送数据(只需从数据库中查找数据,然后使用PHP函数json_encode将选项数据转换为JSON)。

为选项创建数据链属性,如果您想要本地绑定 你必须像这样在你的控制器中创建一个数组, 你可以这样做,

$options = [
    ['text' => 'Series-3', 'value' => 'series-3', 'data-chained' => 'bmw'],
    ['text' => 'Series-5', 'value' => 'series-5', 'data-chained' => 'bmw'],
    ['text' => 'A-3', 'value' => 'a-3', 'data-chained' => 'audi'];

echo $this->Form->select('field', $options);

快乐编码:)