cakephp 3中的链式下拉菜单

时间:2016-07-29 08:14:06

标签: ajax cakephp cakephp-3.x chained-select

我有4个表categoriessubcategoriesproduct_typesproducts。每个都与以下层次结构中的其他关联。

categories
|- subcategories
   |- product_types
      |- products

add() ProductsController行动的观点是

        <?= $this->Form->create($product, ['type' => 'file', 'class' => 'ajax_page']) ?>
            <fieldset>
                <legend><?= __('Add Product') ?> <div class="ajax_loading_image"></div></legend>
                <?php
                    echo $this->Form->input('category_id', ['options' => $categories, 'empty' => true]);
                    echo $this->Form->input('subcategory_id', ['options' => $subcategories]);
                    echo $this->Form->input('product_type_id', ['options' => $productTypes]);
                    echo $this->Form->input('product_code');
                    echo $this->Form->input('SKU');
                    echo $this->Form->input('title');
                    echo $this->Form->input('description');
             </fieldset>
   <?php echo $this->Form->end(); ?>

现在它是列表中的整个列表subcategories。我想在使用Ajax更改subcategories时加载categoriesproduct_types的{​​{1}}。

我没有找到CakePHP 3.x的好例子,还有一些文档提到js helper已从CakePHP 3中删除

如何在CakePHP中实现它3.我也是CakePHP和Ajax的新手。

谢谢。

1 个答案:

答案 0 :(得分:3)

ctp文件如下。首先,我给出了字段类别,子类别,产品类型和产品代码的ID。

<?= $this->Form->create($product, ['type' => 'file', 'class' => 'ajax_page']) ?>
    <fieldset>
        <legend><?= __('Add Product') ?> <div class="ajax_loading_image"></div></legend>
        <?php
                echo $this->Form->input('category_id', ['options' => $categories, 'empty' => true,'id'=>'categories']);
                echo $this->Form->input('subcategory_id', ['options' => '$subcategories','id'=>'subcategories']);
                echo $this->Form->input('product_type_id', ['options' => '$productTypes','id'=>'producttype']);
                echo $this->Form->input('product_code',['options'=>'$productcode','id'=>'productcode']);
                echo $this->Form->input('SKU');
                echo $this->Form->input('title');
                echo $this->Form->input('description');
    </fieldset>     <?php echo $this->Form->end(); ?>

并在您的子类别的ajax调用中如下所示。您可以为product_type和产品代码创建相同的ajax调用

<script>
    $("#categories").on('change',function() {
        var id = $(this).val();

        $("#subcategories").find('option').remove();
        if (id) {
            var dataString = 'id='+ id;
            $.ajax({
                dataType:'json',
                type: "POST",
                url: '<?php echo Router::url(array("controller" => "yourcontroller", "action" => "youraction")); ?>' ,
                data: dataString,
                cache: false,
                success: function(html) {
                    //$("#loding1").hide();
                    $.each(html, function(key, value) {              
                        //alert(key);
                        //alert(value);
                        //$('<option>').val('').text('select');
                        $('<option>').val(key).text(value).appendTo($("#subcategories"));

                    });
                } 
            });
        }
    });

从此代码中您可以获得链式下拉菜单。它为你工作。