我试图根据其他选择选项数据从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]);
但它只获取我的第一个选择选项数据,而不是获取第二个相关数据。
答案 0 :(得分:0)
如果你想使用级联选择,你有两种方法: -
- 本地(提供所有数据以选择选项)
- 远程(将向服务器请求选项然后将选项附加/添加到选择)
醇>
我将为您提供每个方式的示例和步骤: -
本地:-(不在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);
快乐编码:)