私のビジネスディレクトリアプリケーションは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行目]
これに関する追加のヘルプは非常にありがたいです。
ありがとう、ポール