1 changed files with 114 additions and 0 deletions
			
			
		@ -0,0 +1,114 @@ | 
				
			|||||||
 | 
					<?php | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * @link http://www.yiiframework.com/ | 
				
			||||||
 | 
					 * @copyright Copyright (c) 2008 Yii Software LLC | 
				
			||||||
 | 
					 * @license http://www.yiiframework.com/license/ | 
				
			||||||
 | 
					 */ | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace yii\bootstrap; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Yii; | 
				
			||||||
 | 
					use yii\helpers\Html; | 
				
			||||||
 | 
					use yii\widgets\ActiveForm; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/** | 
				
			||||||
 | 
					 * Modal renders a modal window that can be toggled by clicking on a button. | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * For example, | 
				
			||||||
 | 
					 * | 
				
			||||||
 | 
					 * ~~~php | 
				
			||||||
 | 
					 * echo TypeAhead::widget(array( | 
				
			||||||
 | 
					 *     'form' => $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 <amigo.cobos@gmail.com> | 
				
			||||||
 | 
					 * @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); | 
				
			||||||
 | 
						} | 
				
			||||||
 | 
					} | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue