【问题标题】:Using chained with cake php3使用与蛋糕 php3 链接
【发布时间】:2017-07-05 12:55:44
【问题描述】:

我正在尝试根据另一个选择选项数据从选择中加载数据,因此我为此使用了链式想法,但我在获取相关数据时遇到了问题,我认为:

  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]);

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

【问题讨论】:

  • 您使用了 jquery 链接,这很好。但是在更改第一个下拉列表后,是否有任何请求发送到服务器? @Dina Shaldoum
  • 不,这不是它给了我所有的结果,这不是真的,不是相关的值。
  • appelsiini.net/projects/chained,您可以在此处找到文档。
  • 问题是,我正在尝试获取数据链接的动态,但我不能返回 null

标签: javascript ajax cakephp-3.0


【解决方案1】:

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

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

我正在为您提供每种方式的示例和要遵循的步骤:-

本地:-(不要在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格式发送数据(只需从DB中找到数据然后使用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);

快乐编码:)

【讨论】:

  • 你能告诉我如何把 data-chained="bmw" 放在 cake php 中吗?
  • 你可以这样做,
  • 评论不接受很多字符,所以我在答案末尾添加了您查询的答案。 @Dina Shaldoum
猜你喜欢
  • 2017-11-12
  • 1970-01-01
  • 2020-05-26
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多