From fc6e66838a7a3cacb8e240272df68852f2720b29 Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Tue, 21 May 2013 13:12:32 +0200 Subject: [PATCH] added typeahead --- yii/bootstrap/TypeAhead.php | 114 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 yii/bootstrap/TypeAhead.php diff --git a/yii/bootstrap/TypeAhead.php b/yii/bootstrap/TypeAhead.php new file mode 100644 index 0000000..c087cca --- /dev/null +++ b/yii/bootstrap/TypeAhead.php @@ -0,0 +1,114 @@ + $form, + * 'model' => $model, + * 'attribute' => 'country', + * 'pluginOptions' => array( + * 'source' => array('USA', 'ESP'), + * ), + * )); + * ~~~ + * + * The following example will use the name property instead + * + * ~~~php + * echo TypeAhead::widget(array( + * 'name' => 'country', + * 'pluginOptions' => array( + * 'source' => array('USA', 'ESP'), + * ), + * )); + * + * + * @see http://twitter.github.io/bootstrap/javascript.html#typeahead + * @author Antonio Ramirez + * @since 2.0 + */ +class TypeAhead extends Widget +{ + /** + * @var ActiveForm the form that the TypeAhead field is associated with. If no form is associated with the widget + * then the id will be used instead + */ + public $form; + /** + * @var \yii\base\Model the data model that this field is associated with + */ + public $model; + /** + * @var string the model attribute that this field is associated with + */ + public $attribute; + + /** + * @var string the input name. This must be set if [[TypeAhead::$form]] is not set. + */ + public $name; + + /** + * Initializes the widget. + * Renders the input field. + */ + public function init() + { + parent::init(); + echo "\n" . $this->renderField(); + } + + /** + * Registers the plugin. + */ + public function run() + { + $this->registerPlugin('typeahead'); + } + + /** + * Renders the TypeAhead field. If [[TypeAhead::form]] has been specified then it will render an active field. + * Please, note that function will only check whether the form has been set, model and attributes will not. + * If [[TypeAhead::form]] is null not from an [[ActiveForm]] instance, then the field will be rendered according to + * the `name` key setting of [[TypeAhead::options]] array attribute. + * @return string the rendering result + */ + public function renderField() + { + if ($this->form instanceof ActiveForm) { + + $this->options['id'] = $this->id = Html::getInputId($this->model, $this->attribute); + + return Yii::createObject( + array( + 'class' => 'yii\widgets\ActiveField', + 'model' => $this->model, + 'attribute' => $this->attribute, + 'form' => $this->form + ) + )->textInput(); + } + + if (null === $this->name) + throw new InvalidParamException( + get_class($this) . ' must specify "form", "model" and "attribute" or "name" property values' + ); + + return Html::textInput($this->name, '', $this->options); + } +} \ No newline at end of file