From 91f6c6cb00948f5ac3a97f550a05727e12f6efa9 Mon Sep 17 00:00:00 2001 From: Alexander Kochetov Date: Thu, 23 May 2013 20:03:59 +0400 Subject: [PATCH] jQuery UI DatePicker widget --- framework/yii/jui/DatePicker.php | 101 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 framework/yii/jui/DatePicker.php diff --git a/framework/yii/jui/DatePicker.php b/framework/yii/jui/DatePicker.php new file mode 100644 index 0000000..4f68d56 --- /dev/null +++ b/framework/yii/jui/DatePicker.php @@ -0,0 +1,101 @@ + 'yii/jui/datepicker/i18n/ru', + * 'model' => $model, + * 'attribute' => 'country', + * 'clientOptions' => array( + * 'dateFormat' => 'yy-mm-dd', + * ), + * )); + * ``` + * + * The following example will use the name property instead: + * + * ```php + * echo DatePicker::widget(array( + * 'language' => 'yii/jui/datepicker/i18n/ru', + * 'name' => 'country', + * 'clientOptions' => array( + * 'dateFormat' => 'yy-mm-dd', + * ), + * )); + *``` + * + * @see http://api.jqueryui.com/datepicker/ + * @author Alexander Kochetov + * @since 2.0 + */ +class DatePicker extends Widget +{ + /** + * @var string the jQuery UI datepicker widget language bundle. + */ + public $language = false; + /** + * @var \yii\base\Model the data model that this widget is associated with. + */ + public $model; + /** + * @var string the model attribute that this widget is associated with. + */ + public $attribute; + /** + * @var string the input name. This must be set if [[model]] and [[attribute]] are not set. + */ + public $name; + /** + * @var string the input value. + */ + public $value; + + + /** + * Renders the widget. + */ + public function run() + { + echo $this->renderField(); + $this->registerWidget('datepicker'); + if ($this->language !== false) { + $this->getView()->registerAssetBundle($this->language); + } + } + + /** + * Renders the DatePicker 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) { + return Html::activeTextInput($this->model, $this->attribute, $this->options); + } elseif ($this->name !== null) { + return Html::textInput($this->name, $this->value, $this->options); + } else { + throw new InvalidConfigException("Either 'name' or 'model' and 'attribute' properties must be specified."); + } + } +}