2015-11-25 6 views
0

Я использую сетку Yii2 для загрузки страны, штата, города. Я выбрал вариант поиска для страны, штата, города, используя раскрывающийся список. Как создать зависимое выпадающее меню в фильтре?Yii2 GridView search dropdown

<?= 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

Поскольку фильтр формы в изменениях в виде сетки отправить запрос 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 []; 
    } 
    } 
} 

Так же для города модели

+0

'фильтр' => Состояние :: состояние ($ searchModel-> страны), В этой строке я получил сообщение об ошибке, как Undefined переменной: searchModel ... Как я могу исправить tis – shanu

+0

Я использовал в фильтре, например ,,, 'filter' => ArrayHelper :: map (State :: find() -> где (['country_id' => $ searchModel-> country_id]) -> all(), 'id', 'name'), – shanu

+0

Теперь itz работает – shanu

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 
); 
+0

Он не работает – shanu

0

Вот Страна Штат Город Зависимая функциональность Dropdown где город кратна Выбирается

Вот

  <?php 
      echo $form->field($model, 'country_id')->dropDownList(
       $con, 
       [ 
        'prompt'=>'Select Country', 
        'labal'=>false, 
        'onchange'=>' 
         $.get("'.Url::toRoute('/site/lists').'", { id: $(this).val() }) 
          .done(function(data) { 
           $("#'.Html::getInputId($model, 'state_id').'").html(data); 
          } 
         ); 
        '  
       ] 
     )->label('Country Name'); 



     // echo $form->field($model, 'state_id')->dropDownList(['prompt'=>'Select State']); 



      echo $form->field($model, 'state_id')->dropDownList(
       $state, 
       [ 
        'prompt'=>'Select State',      
        'onchange'=>' 
         $.get("'.Url::toRoute('/site/citi').'", { id: $(this).val() }) 
          .done(function(data) { 
           $("#'.Html::getInputId($model, 'citi_id').'").html(data); 

          } 
         ); 
        '  
       ] 
     )->label('State Name'); 



       echo $form->field($model, 'citi_id')->dropDownList(
       $state, 
       [ 
        'prompt'=>'Select City', 
        'multiple' => true, 
        'onchange'=>' 
         $.get("'.Url::toRoute('/site/citi').'", { id: $(this).val() }) 
          .done(function(data) { 
           $("#'.Html::getInputId($model, 'citi_id').'").html(data); 

          } 
         ); 
        '  
       ] 
     )->label('City Name'); 

      // echo $form->field($model, 'citi_id')->dropDownList(['prompt'=>'Select City']); 
      ?> 

Вот функция SiteController

государство Относящиеся к стране

public function actionLists($id) 
{ 
    $model = new State(); 
    $rows = $model::find()->where(['country_id' => $id])->all();   
    $countPosts = $model::find(); 
    echo "<option>Select State</option>"; 

    if(count($rows)>0){ 
     foreach($rows as $row){ 
      echo "<option value='$row->id'>$row->name</option>"; 
     } 
    } 
    else{ 
     echo "<option>Select State</option>"; 
    } 
}  

**City Related to State** 

    public function actionCiti($id) 

{ 
     //die('hello'); 
    $model = new Citi(); 
    $rows = $model::find()->where(['state_id' => $id])->all();   
    $countPosts = $model::find(); 
    echo "<option>Choose City</option>"; 

    if(count($rows)>0){ 
     foreach($rows as $row){ 
      echo "<option value='$row->id'>$row->name</option>"; 
     } 
    } 
    else{ 
     echo "<option>No City Available</option>"; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^