Pada saat user mengisi sebuah form dalam aplikasi komputer, ada field-field tertentu yang datanya harus dipilih dari ribuan data. Jika data ini disajikan seluruhnya, maka user akan dipenuhi dengan data dan akan terlihat kompleks. Untuk mengatasi ini maka user dapat melakukan search kemudian pilihan yang relevan akan muncul. Kita dapat melakukan hal ini pada Yii.

Sebagai contoh ada aplikasi penambahan stok barang yang mengharuskan kita memilih ribuan barang. Untuk dapat mengerjakan ini ada 2 langkah :

  1. Menyiapkan sumber data dari Item, dalam contoh ini ItemController:
        public function actionSuggestItem($store_source)
        {
            $store_source=(int)$store_source;
            if ($store_source)
            {
                $criteria = new CDbCriteria;
                //$criteria->select = array(‘t.item_id’, ‘item.item_code’, ‘item.item_name’,’qty_balance’);
                //$criteria->select = array(‘qty_balance’);
                $criteria->condition=”store_id=$store_source”;
                $criteria->addSearchCondition(‘item_name’, $_GET[‘term’]);
                $criteria->addSearchCondition(‘item_code’, $_GET[‘term’],true,’OR’);
                //$criteria->limit = 15;
                $data = StoreItem::model()->with(‘item’)->findAll($criteria);

                $arr = array();
                foreach ($data as $item) {
                    $arr[] = array(
                        ‘item_id’ => $item->item_id,
                        ‘label’ =>  $item->item->item_code .’-‘.$item->item->item_name .”(” .$item->qty_balance .”)” ,
                        ‘value’ => $item->item->item_name,
                    );
                }
               
            }
            else
            {
                $criteria = new CDbCriteria;
                $criteria->select = array(‘item_id’, ‘item_code’, ‘item_name’);
                $criteria->addSearchCondition(‘item_name’, $_GET[‘term’]);
                $criteria->addSearchCondition(‘item_code’, $_GET[‘term’],true,’OR’);
                //$criteria->limit = 15;
                $data = Item::model()->findAll($criteria);
       
                $arr = array();
                foreach ($data as $item) {
                    $arr[] = array(
                        ‘item_id’ => $item->item_id,
                        ‘label’ => $item->item_code . ‘-‘ . $item->item_name ,
                        ‘value’ => $item->item_name,
                    );
                }
            }
            echo CJSON::encode($arr);
        }

  2. Pada form yang akan memanggil item diubah seperti contoh berikut ini:
        <div class=”row”>
            <?php echo $form->labelEx($model,’item_id’); ?>
            <?php echo $form->hiddenField($model,’item_id’);
            if ($model->mutationOrder->mutation_type==-1)
            {
                $store_source=$model->mutationOrder->store_id;
            }
            else
            {
                $store_source=0;
            }
               $this->widget(‘zii.widgets.jui.CJuiAutoComplete’, array(
                  ‘name’=>’MutationOrderItem[item_name]’,
                ‘sourceUrl’ => array(‘item/suggestItem’,’store_source’=>$store_source),
                ‘value’ => ($model->item_id) ? $model->item->item_name : “Please type”,
                ‘options’ => array(
                    ‘showAnim’ => ‘fold’,
                    ‘minLength’=>’2’,
                   ‘select’ => ‘js:function(event, ui){ jQuery(“#MutationOrderItem_item_id”).val(ui.item[“item_id”]); }’
                ),
            ))
             ?>
            <?php echo $form->error($model,’item_id’); ?>
        </div>
  3. Hasilnya bisa dilihat seperti gambar berikut ini:

Untuk informasi lebih lanjut bisa dilihat di http://www.yiiframework.com/forum/index.php?/topic/13275-solvedcjuiautocomplete-help/page__p__65080__hl__autocomplete#entry65080 .

Kunjungi www.proweb.co.id untuk menambah wawasan anda.

 

Autocomplete dengan database di Yii