2014-04-22 14 views
7

W Yii2 Chcę, aby jedno z moich pól wejściowych było autouzupełniania, gdy użytkownik zaczyna pisać. Poniżej znajduje się mój kod, który używa Jui Autocomplete.Autouzupełnianie w Yii2

<?php 
    $items= ArrayHelper::map(Company::find()->all(), 'c_id', 'name'); 
    echo AutoComplete::widget([ 
    'model' => $model, 
    'attribute' => 'company', 
    'clientOptions' => [ 
    'source' => $items, 
    ], 
    ]);?> 

To nie jest working.When i drukowane mój tablicę, mam jak

Array ([1] => abc [2] => xyz [4] => pqr) 

mam to działa, gdy ręcznie ustawić jak

$items=['abc','xyz','pqr']; 

Powodem może być moim c_id's nie są zamawiane? Ale chcę, aby wartość c_id została przesłana! Jakikolwiek pomysł, jak to naprawić?

+0

Dobre pytanie, wygląda na to, że nie możesz – Alex

+0

@Alex Dziękujemy! Zobacz moje zaktualizowane pytanie http://stackoverflow.com/questions/23260636/autocomplete-options-from-database-yii2 –

Odpowiedz

12

ten można rozwiązać za pomocą ukrytej input.Hope pola Pomoże ktoś!

<?php 
    use yii\web\JsExpression; 

    $data = Company::find() 
    ->select(['name as value', 'name as label','c_id as id']) 
    ->asArray() 
    ->all(); 

    echo AutoComplete::widget([ 
    'name' => 'Company', 
    'id' => 'ddd', 
    'clientOptions' => [ 
     'source' => $data, 
     'autoFill'=>true, 
     'minLength'=>'4', 
     'select' => new JsExpression("function(event, ui) { 
       $('#user-company').val(ui.item.id); 
      }") 
     ], 
    ]); 
    ?> 

    <?= Html::activeHiddenInput($model, 'company')?> 
+1

Hi Dency - Próbowałem użyć widżetu autouzupełniania za pomocą sugestii. Działa poprawnie, ale po aktualizacji pole jest puste. czy czegoś brakuje? – Joshi

1

Autouzupełnianie ułatwia wypełnienie pola wymaganą wartością. Jeśli chcesz przesłać c_id look do dropdownList lub Select2.

Sprawdź ten widget http://demos.krajee.com/widget-details/select2 yii2 pod kątem pomysłów. Oto przykładowy kod:

<?php 
    use kartik\widgets\Select2; 
    use app\models\Modelname; 

    $model = new Modelname; 

    $data = ['qwe1'=>'color1','key2'=>'color3'] 

    ?> 

    <?= Html::beginForm() ?> 

    <?= Select2::widget([ 
    'model' => $model, 
    'attribute' => 'color', 
    'data' => array_merge(["" => ""], $data), 
    'options' => ['placeholder' => 'Select a state ...'], 
    'pluginOptions' => [ 
     'allowClear' => true 
    ], 
    ]); ?> 

    <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?> 

    <?= Html::endForm() ?> 

Obsługuje również ajax załadowane dane: http://demos.krajee.com/widget-details/select2#ajax

+0

Dziękuję za odpowiedź. Ale chciałbym zrobić to bez żadnych rozszerzeń. Zobacz moje zaktualizowane pytanie.http: //stackoverflow.com/questions/23260636/autocomplete-options-from-database-yii2? Lq = 1 –