2016-05-07 4 views
0

検索時に1つ以上の情報を表示するので、select2 ajax &テンプレートを使用します。それはjsonを使用します。私はURLを変更し、私は自分のコントローラーで機能を作ります。しかし、私は問題があります。何も表示することはできません。どうしたの?これは私のコードです:yii2でajax&templatesでselect2を使用する方法

スクリプト

$formatJs = <<< 'JS' 
     var formatPenerima = function (penerima) { 
      if (penerima.loading) { 
       return penerima.text; 
      } 
      var markup = 
      '<div class="row">' + 
       '<div class="col-sm-5">' + 
        '<b style="margin-left:5px">' + penerima.nama + '</b>' + 
       '</div>' + 
       '<div class="col-sm-3"><i class="fa fa-code-fork"></i> ' + penerima.no_telepon + '</div>' + 
       '<div class="col-sm-3"><i class="fa fa-star"></i> ' + penerima.email + '</div>' + 
      '</div>'; 
      return '<div style="overflow:hidden;">' + markup + '</div>'; 
     }; 
     var formatPenerimaSelection = function (penerima) { 
      return penerima.nama || penerima.text; 
     } 
JS; 

    // Register the formatting script 
    $this->registerJs($formatJs, \yii\web\View::POS_HEAD); 

    // script to parse the results into the format expected by Select2 
    $resultsJs = <<< JS 
    function (data, params) { 
     params.page = params.page || 1; 
     return { 
      results: data.items, // check here 
      /*pagination: { 
       more: (params.page * 30) < data.total_count 
      }*/ 
     }; 
    } 
JS; 

form.php

echo Select2::widget([ 
     'name' => 'kv-repo-template', 
     'value' => '14719648', 
     'initValueText' => 'kartik-v/yii2-widgets', 
     'options' => ['placeholder' => 'Search for a repo ...'], 
     'pluginOptions' => [ 
      'allowClear' => true, 
      'minimumInputLength' => 1, 
      'ajax' => [ 
       // 'url' => "https://api.github.com/search/repositories", 
       'url' => Url::to(['paket/jsonlist']), 
       'dataType' => 'json', 
       'delay' => 250, 
       'data' => new JsExpression('function(params) { return {q:params.term, page: params.page}; }'), 
       'processResults' => new JsExpression($resultsJs), 
       'cache' => true 
      ], 
      'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), 
      'templateResult' => new JsExpression('formatPenerima'), 
      'templateSelection' => new JsExpression('formatPenerimaSelection'), 
     ], 
    ]); 

コントローラ

public function actionJsonlist($search = NULL, $no_induk = NULL) 
    { 
     header('Content-type: application/json'); 
     $clean['more'] = false; 

     $query = new \yii\db\Query; 
     if(!is_Null($search)) 
     { 
      $mainQuery = $query->select('no_induk, nama, no_telepon, email') 
           ->from('penerima'); 
      $command = $mainQuery->createCommand(); 
      $rows = $command->queryAll(); 
      $clean['results'] = array_values($rows); 
     } 
     else 
     { 
      if(!is_null($no_induk)) 
      { 
       $clean['results'] = ['no_induk'=> $no_induk, 'nama' => \frontend\models\Penerima::find($no_induk)->nama, 
        'no_telepon' => \frontend\models\Penerima::find($no_induk)->no_telepon, 'email' => \frontend\models\Penerima::find($no_induk)->email]; 
      }else 
      { 
       $clean['results'] = ['no_induk' => null, 'nama' => 'None found', 'no_telepon' => 'None found', 'email' => 'None found']; 
      } 
     } 
     echo \yii\helpers\Json::encode($clean); 
     exit(); 
    } 
+0

エラーメッセージやコンソールエラーは何ですか? – leninhasda

+0

エラーは表示されません。しかし、select2は単語を入力すると何も表示されません。 – RiefSapthana

+0

あなたのPHPエラーを確認してください。そしてそれは$ clean ['more]ですか?このスコープのどこにも割り当てられません。 –

答えて

0

あなたは、解析に使用するコントローラのアクションに基づいて要求の答えを、変更する必要があります可能回答はSelect2です。あなたの場合、processResultsSelect2に変更して、resultsのプロパティをjson answerの結果として解析する必要があります。簡単に$resultJsを次のように変更する必要があります。

$resultsJs = <<< JS 
    function (data, params) { 
     params.page = params.page || 1; 
     return { 
      // Change `data.items` to `data.results`. 
      // `results` is the key that you have been selected on 
      // `actionJsonlist`. 
      results: data.results 
     }; 
    } 
JS; 
関連する問題