1

私のビジネスディレクトリアプリケーションは3つのチェーンされた選択ボックスを必要とし、私はこのアプリケーションを構築するためにcakephpを使用しています。

セクションの階層と選択の順序は次のとおりです。

1-ビジネスグループ

2-業種

3-都市(テーブルの顧客に含まれる)

関係は次のとおりです。

  • 顧客のHABTMビジネスタイプ

  • ビジネスグループには多くの業種があります

  • ビジネスタイプには、HABTMの顧客という1つのビジネスグループがあります

これに役立つjqueryプラグインを検索し、Remy Sharpによるプラグインを見つけましたが、これほど複雑な関係はありません。 http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/

私が想像しているのは、最初の選択ボックス(ビジネスグループ)が事前に入力されており、選択が行われると、イベントリスナーが2番目の選択ボックスをフィルタリングするメッセージを送信し、3番目の選択ボックスも同じです。

私が知らないのは、イベントリスナーに基づいて検索アクションを構成する方法です。

何かアドバイスがありますか、それとも私はベースから離れていますか?

いつものように、私は助けを求めて井戸にやって来ます。

とても有難い。ポール


ニックに感謝します。あなたの投稿をたくさん読みました。あなたの回答に本当に感謝しています。

私はあなたの指示に従いましたが、問題が発生しました。私はそれらを解決するために最善を尽くしましたが、それを理解していません。

これは私がこれまでに行ったことです:

1)business_typeとbusiness_directoryの両方に「連鎖」アクションを作成しました(customerの名前をbusinessディレクトリに変更しました。これがより適切です)。

ビジネスタイプの連鎖アクション:

function chained($business_group_id) {
    $business_types = $this->BusinessType->find('list', array(
        'conditions' => array( 'BusinessType.business_group_id' => $business_group_id)
        ));

         $this->set('business_types', $business_types);
     }

ビジネスディレクトリ連鎖アクション:

function chained($business_type_id) {
    $business_directories = $this->BusinessDirectory->bindModel(array( 'hasOne' => array('business_directories_business_types' )));         
    $business_directories = $this->BusinessDirectory->find('all', array(
        'fields' => array( ' BusinessDirectory.city'),
        'conditions' => array( 'business_directories_business_types.business_type_id' => $business_type_id)
        ));
            $this->set('business_directories', $business_directories);
     }

HABTM関係では、find'list'を使用しても結合クエリが作成されなかったのに対し、find'all'は作成されたことがわかりました。

2)次に、ビジネスディレクトリと対応するビューに検索アクションを作成しました。

ビジネスグループの場合、検索フォームにオプションリストを入力するためのgetListアクションを作成しました。

function getList() {
     return $this->BusinessGroup->find('list');
}

検索ビューで、チェーン選択のJavaScriptを追加しました。

<script type="text/javascript">
<!--
$(function () {
    var group = $('#businessGoup');
    var type = $('#businessType');
    var city = $('#businessDirectoryCity');

    type.selectChain({
        target: city,
        url:  '../business_directories/chained/'+$(this).val(),
  data: { ajax: true, anotherval: "anotherAction" }
    });

    group.selectChain({
        target: type,
        url: '../business_types/chained/'+$(this).val()   
    }).trigger('change');

});
//-->
</script>

そしてフォーム:

create('business_directories'、array('action' =>'/ search_results')); ?> input('business_group_id'、array('type' =>'select'、'id' =>'businessGoup'、'empty' =>'-ビジネスグループの選択-'、'multiple' => true、 'options' => $ this-> requestAction('/ business_groups / getList')、'label' =>'ビジネスグループ')); ?> input('business_type.id'、array('type' =>'select'、'id' =>'businessType'、'empty' =>'-ビジネスタイプの選択-'、 ' 複数'=>true、'オプション'=>'選択なし'、'ラベル'=>'ビジネスタイプ')); ?> input('business_directories.id'、array('type' =>'select'、'id' =>'businessDirectoryCity'、'empty' =>'-Select City-'、'multiple' => true 、'options' =>'options'、'label' =>'City')); ?> end('検索'); ?> id'、array(' type'=>' select'、' id'=>' businessDirectoryCity'、' empty'=>'-Select City-'、' multiple'=> true、' options'=>'オプション'、'ラベル'=>'市')); ?> end('検索'); ?> id'、array(' type'=>' select'、' id'=>' businessDirectoryCity'、' empty'=>'-Select City-'、' multiple'=> true、' options'=>'オプション'、'ラベル'=>'市')); ?> end('検索'); ?>

ビジネスタイプチェーン関数/business_types/ chained / 1をテストすると、すべてが機能します。

しかし、検索ビューをテストすると、JavaScriptアラートエラーが発生します。次に、firebugをチェックすると、次の2つのエラーが発生します。

警告(2):BusinessTypesController :: chained()の引数1がありません[APP \ controllers \ business_types_controller.php、71行目]

注意(8):未定義の変数:business_group_id [APP \ controllers \ business_types_controller.php、73行目]

これに関する追加のヘルプは非常にありがたいです。

ありがとう、ポール

4

1 に答える 1

2

必要なのは、コントローラー(business_typeとcustomer)に2つのアクションを設定することです。

各アクションは次のようになります。その場合、業種の場合

function chained($parent_id){
    $business_types = $this->BusinessType->find('list', array('conditions'=>'BusinessType.business_group_id'=>$parent_id));
    $this->set('business_types', $business_types);
}

もちろん、連鎖選択に適切な形式で値をフォーマットするアクションも表示する必要があります。

ビジネスグループの場合、ajaxが不要になるように、すべての値を直接表示する必要があります。

カスタマーコントローラーのアクションも同様ですが、関連するすべてのカスタマーの都市を選択する必要があります。

次に、連鎖選択を使用して、適切な要素を設定し、呼び出す必要のある適切なアクションを設定する必要があります。

すなわち:

$('#id-of-the-business-group').selectChain({
    target: $('#id-of-the-business-type-field'),
    url: '/business_types/chained/'+$(this).val()
});
于 2010-09-14T07:10:00.040 に答える