diff --git a/yii/bootstrap/TypeAhead.php b/yii/bootstrap/TypeAhead.php new file mode 100644 index 0000000..fd1d90c --- /dev/null +++ b/yii/bootstrap/TypeAhead.php @@ -0,0 +1,100 @@ + $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 \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 [[form]] is not set. + */ + public $name; + /** + * @var string the input value. + */ + public $value; + + + /** + * Renders the widget + */ + public function run() + { + echo "\n" . $this->renderField() . "\n"; + $this->registerPlugin('typeahead'); + } + + /** + * Renders the TypeAhead field. If [[model]] has been specified then it will render an active field. + * If [[model]] is null or not from an [[Model]] instance, then the field will be rendered according to + * the [[name]] attribute. + * @return string the rendering result + * @throws InvalidConfigException when none of the required attributes are set to render the textInput. That is, + * if [[model]] and [[attribute]] are not set, then [[name]] is required. + */ + public function renderField() + { + if ($this->model instanceof Model && $this->attribute !== null) { + + $this->options['id'] = Html::getInputId($this->model, $this->attribute); + + return Html::activeTextInput($this->model, $this->attribute, $this->options); + } + + if ($this->name === null) { + throw new InvalidConfigException( + get_class($this) . ' must specify "form", "model" and "attribute" or "name" property values' + ); + } + + return Html::textInput($this->name, $this->value, $this->options); + } +}