1

国、州、都市を読み込むために Yii2 gridview を使用しています。ドロップダウンを使用して、国、州、都市の検索オプションを設定しました。フィルターで依存ドロップダウンを作成するにはどうすればよいですか?

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
         [
        'attribute' => 'country_id',
        'label' => 'Country',
        'filter' => Country::country(),
        'value' => function($data){
        return Country::countryname($data->country_id);
        }
         ],
        [

          'attribute' => 'state_id',
          'filter' => State::state(),
          'value' => function($data){
            return State::statename($data->state_id);
          }
        ],
         [

          'attribute' => 'city_id',
          'filter' => City::city(),
          'value' => function($data){
            return City::cityname($data->city_id);
          }
        ],

]); ?>
4

4 に答える 4

4

グリッド ビューのフィルター フォームが変更されるため、フォームの onChange 要求が送信されます。次のようにフィルター リストを簡単に作成できます。

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
         [
        'attribute' => 'country_id',
        'label' => 'Country',
        'filter' => Country::country(),
        'value' => function($data){
        return Country::countryname($data->country_id);
        }
         ],
        [

          'attribute' => 'state_id',
          'filter' => State::state($searchModel->country), //Country Id/name from SearchModel --- you can add condition if isset($searchModel->country) then show else [] blank array
          'value' => function($data){
            return State::statename($data->state_id);
          }
        ],
         [

          'attribute' => 'city_id',
          'filter' => City::city($searchModel->state),   //Country Id/name from SearchModel --- you can add condition if 
          'value' => function($data){
            return City::cityname($data->city_id);
          }
        ],

]); ?>

都道府県/都市のフィルターで独自の関数を提供したので、、、の設定値の代わりに配列リストを取得します$searchModel->state

インステート モデル

class State extends \yii\db\ActiveRecord{

  public static state($country){
    if($country){
        return ['state'];
    }else{
        return [];
    }
  }
}

都市モデルも同様

于 2015-11-25T08:25:41.323 に答える
0

$searchModel が ModelSearch のオブジェクトである場合、ビューで:

$this->registerJs( <<< EOT_JS

      $('#ModelSearch[state_id]').on('change', function(ev) {
            $.get(
                '<url>',
                { parameters }
                function(data) { 
                      // if data is an html response...
                      $('#ModelSearch[city_id]').html(data);
                }
            );
      }

EOT_JS
);
于 2015-11-25T08:27:48.853 に答える