summaryrefslogtreecommitdiff
path: root/framework/zii/widgets/jui/CJuiDatePicker.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/zii/widgets/jui/CJuiDatePicker.php')
-rw-r--r--framework/zii/widgets/jui/CJuiDatePicker.php133
1 files changed, 133 insertions, 0 deletions
diff --git a/framework/zii/widgets/jui/CJuiDatePicker.php b/framework/zii/widgets/jui/CJuiDatePicker.php
new file mode 100644
index 0000000..25c9ec4
--- /dev/null
+++ b/framework/zii/widgets/jui/CJuiDatePicker.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * CJuiDatePicker class file.
+ *
+ * @author Sebastian Thierer <sebathi@gmail.com>
+ * @link http://www.yiiframework.com/
+ * @copyright Copyright &copy; 2008-2011 Yii Software LLC
+ * @license http://www.yiiframework.com/license/
+ */
+
+Yii::import('zii.widgets.jui.CJuiInputWidget');
+
+/**
+ * CJuiDatePicker displays a datepicker.
+ *
+ * CJuiDatePicker encapsulates the {@link http://jqueryui.com/demos/datepicker/ JUI
+ * datepicker} plugin.
+ *
+ * To use this widget, you may insert the following code in a view:
+ * <pre>
+ * $this->widget('zii.widgets.jui.CJuiDatePicker', array(
+ * 'name'=>'publishDate',
+ * // additional javascript options for the date picker plugin
+ * 'options'=>array(
+ * 'showAnim'=>'fold',
+ * ),
+ * 'htmlOptions'=>array(
+ * 'style'=>'height:20px;'
+ * ),
+ * ));
+ * </pre>
+ *
+ * By configuring the {@link options} property, you may specify the options
+ * that need to be passed to the JUI datepicker plugin. Please refer to
+ * the {@link http://jqueryui.com/demos/datepicker/ JUI datepicker} documentation
+ * for possible options (name-value pairs).
+ *
+ * @author Sebastian Thierer <sebathi@gmail.com>
+ * @version $Id: CJuiDatePicker.php 3539 2012-01-15 18:55:01Z mdomba $
+ * @package zii.widgets.jui
+ * @since 1.1
+ */
+class CJuiDatePicker extends CJuiInputWidget
+{
+ /**
+ * @var string the locale ID (eg 'fr', 'de') for the language to be used by the date picker.
+ * If this property is not set, I18N will not be involved. That is, the date picker will show in English.
+ * You can force English language by setting the language attribute as '' (empty string)
+ */
+ public $language;
+
+ /**
+ * @var string The i18n Jquery UI script file. It uses scriptUrl property as base url.
+ */
+ public $i18nScriptFile = 'jquery-ui-i18n.min.js';
+
+ /**
+ * @var array The default options called just one time per request. This options will alter every other CJuiDatePicker instance in the page.
+ * It has to be set at the first call of CJuiDatePicker widget in the request.
+ */
+ public $defaultOptions;
+
+ /**
+ * @var boolean If true, shows the widget as an inline calendar and the input as a hidden field. Use the onSelect event to update the hidden field
+ */
+ public $flat = false;
+
+ /**
+ * Run this widget.
+ * This method registers necessary javascript and renders the needed HTML code.
+ */
+ public function run()
+ {
+
+ list($name,$id)=$this->resolveNameID();
+
+ if(isset($this->htmlOptions['id']))
+ $id=$this->htmlOptions['id'];
+ else
+ $this->htmlOptions['id']=$id;
+ if(isset($this->htmlOptions['name']))
+ $name=$this->htmlOptions['name'];
+
+ if ($this->flat===false)
+ {
+ if($this->hasModel())
+ echo CHtml::activeTextField($this->model,$this->attribute,$this->htmlOptions);
+ else
+ echo CHtml::textField($name,$this->value,$this->htmlOptions);
+ }
+ else
+ {
+ if($this->hasModel())
+ {
+ echo CHtml::activeHiddenField($this->model,$this->attribute,$this->htmlOptions);
+ $attribute = $this->attribute;
+ $this->options['defaultDate'] = $this->model->$attribute;
+ }
+ else
+ {
+ echo CHtml::hiddenField($name,$this->value,$this->htmlOptions);
+ $this->options['defaultDate'] = $this->value;
+ }
+
+ if (!isset($this->options['onSelect']))
+ $this->options['onSelect']="js:function( selectedDate ) { jQuery('#{$id}').val(selectedDate);}";
+
+ $id = $this->htmlOptions['id'] = $id.'_container';
+ $this->htmlOptions['name'] = $name.'_container';
+
+ echo CHtml::tag('div', $this->htmlOptions, '');
+ }
+
+ $options=CJavaScript::encode($this->options);
+ $js = "jQuery('#{$id}').datepicker($options);";
+
+ if ($this->language!='' && $this->language!='en')
+ {
+ $this->registerScriptFile($this->i18nScriptFile);
+ $js = "jQuery('#{$id}').datepicker(jQuery.extend({showMonthAfterYear:false}, jQuery.datepicker.regional['{$this->language}'], {$options}));";
+ }
+
+ $cs = Yii::app()->getClientScript();
+
+ if (isset($this->defaultOptions))
+ {
+ $this->registerScriptFile($this->i18nScriptFile);
+ $cs->registerScript(__CLASS__, $this->defaultOptions!==null?'jQuery.datepicker.setDefaults('.CJavaScript::encode($this->defaultOptions).');':'');
+ }
+ $cs->registerScript(__CLASS__.'#'.$id, $js);
+
+ }
+} \ No newline at end of file