0

テーブルの列を含む CGridView があります"product" => {'product_id','category_id',...} 別のテーブルがあります"category" => {'category_id','category_name'}

category_idproductテーブル内の FKです。

ここで、カテゴリ テーブルのドロップダウン リストが必要です。特定の値を選択すると、製品の CGridView を更新して、その行のみを表示する必要がありますcategory_id。CGridView が機能するためには、列のフィルタリング/並べ替えも必要です (AJAX を使用)。

値がドロップダウンから選択されたときに CGridView を更新できましたが、CGridView の「データ」で category_id を送信できません。

clientScript->registerScript('search', "
$('.cat_dropdown').change(function(){
    $.fn.yiiGridView.update('order-grid', {
        data: $(this).serialize(),
    });
    return false;
});
");
data: $(this).serialize()は、CGridView のフィルタリング テキスト フィールドに存在する値のみを送信します 。どうすれば category_id を追加できますか?

上記の方法が適切でない場合は、別の方法を提案してください。

4

2 に答える 2

1

これが私が最終的にやった方法です。解決策が最適かどうかはわかりませんが、うまくいきます。どんなコメントでも大歓迎です。

Yii::app()->clientScript->registerScript('yiiGridView.update', " $.fn.yiiGridView.update = function(id, options) { var settings = $.fn.yiiGridView.settings[id]; var data = { 'product[category_id]': $('.cat_dropdown option:selected').val(), }; options = $.extend({ type: 'GET', data: data, success: function(data,status) { $.each(settings.ajaxUpdate, function() { $('#'+this).replaceWith($(data).find('#'+this)); }); if(settings.afterUpdate != undefined) settings.afterUpdate(id, data); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.responseText); } }, options || {}); if(settings.beforeUpdate != undefined) settings.beforeUpdate(id); $.ajax(options); }; ");

ただし、上記のソリューションには、category_idCGridView の in the columns オプションが必要です。削除すると、他の列のフィルタリングは機能しません。保持されている場合、他の列のフィルタリングは機能しますがcategory_id、グリッドに存在します (これは必須ではありません) category_idCGridView またはその他のソリューションで列を非表示にする方法が必要です。

于 2010-04-25T05:21:14.137 に答える
1

ドロップ メニューを CGridView に追加するだけで済みます。

array('name' => 'category_id', 'value' => 'Categories::model()->getCategoryName($data->category_id)', 'filter'=>CHtml::listData(Categories::model()->getCategoryObj(), 'category_id', 'category_name')),

上記を見て、Categories クラスに 2 つのメソッドを追加する必要があります。

getCategoryName getCategoryObj

これを読む:

http://www.mattiressler.com/customising-cgridview-select-menu/

http://www.mattiressler.com/using-class-properties-to-minimise-database-queries/

JavaScriptを追加する必要はありません:-)

于 2012-05-01T22:17:06.373 に答える