2016-07-29 2 views
1

私は4つのテーブルcategories,subcategories,product_typesおよびproductsを持っています。それぞれは、後続の階層で他のものと関連付けられます。cakephpの連鎖ドロップダウンメニュー3

categories 
|- subcategories 
    |- product_types 
     |- products 

ProductsControlleradd()アクションのビューには、今のところは、リスト内のリスト全体subcategoriesある

 <?= $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(); ?> 

です。 Ajaxを使用してsubcategoriesの変更時にcategoriesproduct_typesの変更時にsubcategoriesをロードします。

は、私はCakePHPの3.xのが見つかりことができない良い例ではありませんし、また、いくつかのドキュメントは、それは私は、CakePHPに新たなんだヘルパーは、CakePHP 3それはCakePHPの3に実装することができますどのように

から削除されましたJS言及しましたAjaxも同様です。

ありがとうございます。

+0

ヒント:http://sandbox.dereuromark.de/sandbox/ajax-examples/chained-dropdowns :)これにはソースコードも含まれています。 – mark

答えて

1

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と製品コード

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

        }); 
       } 
      }); 
     } 
    }); 

に同じAJAX呼び出しを作成することができます。あなたのための仕事。

+0

アクションのコードは何でしょうか。私はこれを試みたが、それは動作していません。私はアクション 'public function getSubcategories()を試しました。 { $ id = $ this-> request-> data( 'id'); $サブカテゴリ=の$ this - > Subcategories->検索( 'すべて'、[ '条件' => [ 'CATEGORY_ID' => $番号 ] ])。 echo json_encode($ subcategories); } ' –

+0

findをlist関数に置き換えて試してみてください。その作業 –

+0

ありがとうございます。 appendTo($( "#subcategories")); 'appendTo($ [" id '])は、 –