【问题标题】:Need a searchable drop down list in yii在 yii 中需要一个可搜索的下拉列表
【发布时间】:2015-09-06 20:02:25
【问题描述】:

我想在 yii 中创建一个可搜索的下拉列表,它从数据库中获取数据,就像在这个链接 demo 中一样,并将其存储在数据库中。我知道如何制作下拉列表,但我的任务是创建一个可搜索的下拉列表,就像当我开始输入时,下拉列表打开并显示数据库中的数据。 我在 (package) 视图中,其中 (package-item) 是想要搜索下拉列表的字段。

<?php
/* @var $this PackageController */
/* @var $model Package */
/* @var $form BSActiveForm */
?>
<?php $form=$this->beginWidget('bootstrap.widgets.BsActiveForm', array(
    'id'=>'package-form',
    // Please note: When you enable ajax validation, make sure the corresponding
    // controller action is handling ajax validation correctly.
    // There is a call to performAjaxValidation() commented in generated controller code.
    // See class documentation of CActiveForm for details on this.
    'enableAjaxValidation'=>false,
)); ?>

    <p class="help-block">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>

    <?php echo $form->textFieldControlGroup($model,'package_name',array('maxlength'=>45)); ?>

    <?php  echo $form->textFieldControlGroup($model,'package_item',array('maxlength'=>45)); ?>


    <?php echo $form->textFieldControlGroup($model,'package_detail',array('maxlength'=>45)); ?>

    <?php echo BsHtml::submitButton('Submit', array('color' => BsHtml::BUTTON_COLOR_PRIMARY)); ?>

<?php $this->endWidget(); ?>

【问题讨论】:

  • 试试 yii 的 select2 扩展。

标签: jquery database list drop-down-menu yii


【解决方案1】:
  • 如果您只想要 autocomplete,那么这可能会有所帮助:

在你看来:

<?php
echo "<div class='auto-search'>";
    $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
      'id'=>'package_item',
      'name'=>'package_item',
      'source'=>$this->createUrl('site/suggestItem'),
      'htmlOptions'=>array(
          'class'=>'package_item',
          'placeholder'=>"Search package.."
      ),
    ));
echo "</div>";
?>

在您的控制器中(在本例中为 siteController)创建一个新操作:

<?php
public function actionsuggestItem()
    {
        $request    = trim($_GET['term']);
        $data       = array();
        if($request != ''){
            //your query to database to get package items.
            $packageModel = Package::model()->findAll("packagename=$request");
            foreach($packageModel as $get){
                $data[] = $get->packagename;
            }
            echo json_encode($data);
        }
        Yii::app()->end();
    }
?>
  • 如果你想要 dropdownautocomplete

那么你可以使用这个Select2 Extension

在你看来:

<?php $this->widget('ext.select2.ESelect2',array(
      'model'=>$model,
      'attribute'=>'package_item',
      'data'=>$model->searchItem(),
    ); ?>

在您的模型中:

<?php
    public function searchItem() {
        $data         = array();
        $packageModel = Package::model()->findAll();
        foreach($packageModel as $get){
            $data[] = $get->packagename;
        }
        return $data;
        Yii::app()->end();
    }
?>

请注意,这些只是示例,请根据需要进行修改。

【讨论】:

  • 如果我想使用 select 2 扩展,我想要数据库中的数据,而不是像这样的 'data'=>array( 0=>'Nol', 1=>'Satu', 2 =>'杜阿',
  • @UsmanDabayKhan 在您的模型中创建一个函数并在data 属性中调用它。
【解决方案2】:
  $this->widget('ext.select2.ESelect2',array(
  'name'=>'package_item',
  'data'=>CHtml::listData(Package::model()->findAll(), 'id', 'package_item'), //the whole available list
  'htmlOptions'=>array(
       'placeholder'=>' search packge item?',
    //'options'=>$options, //the selected values
    'multiple'=>'multiple',
    'style'=>'width:530px',
  ),
  ));

做到了,现在它的工作。感谢上帝。创建了下拉菜单,但无法搜索,然后我注释掉 jquery,现在它可以工作了。但我的下一个问题是如何在数据库中存储多个值?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多