Incam_PROFIND_Web/www/protected/extensions/yii-chosen/Chosen.php
david e81ded2173 - Titulaciones de candidatos
- Extensión "jQuery Chosen"
- Arreglos en migraciones para indicar el tipo de tablas InnoDB


git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_PROFIND_Web/trunk@67 3fe1ab16-cfe0-e34b-8c9f-7d8c168d430d
2012-10-24 17:18:48 +00:00

149 lines
5.0 KiB
PHP

<?php
/**
* Widget to use Chosen in Yii application.
*
* Chosen script:
* @link http://harvesthq.github.com/chosen/
*
* @author Bogdan Savluk <savluk.bogdan@gmail.com>
*/
class Chosen extends CInputWidget
{
/** @var string Path to assets directory published in init() */
private $assetsDir;
/** @var bool Multiple or single item should be selected */
public $multiple = false;
/** @var string|null If is set will override default label "Select Some Options" */
public $placeholderMultiple;
/** @var string|null If is set will override default label "Select an Option" */
public $placeholderSingle;
/**
* @var bool Allow deselect single selected item from dropDown.
* Chosen will add a UI element for option deselection.
* This will only work if the first option has blank text.
*/
public $allowSingleDeselect = true;
/** @var string|null If is set will override default label "No results match" */
public $noResults;
/** @var array Chosen script settings passed to $.fn.chosen() */
private $settings = array();
/** @var array See CHtml::listData() */
public $data;
/** Publish assets and set default values for properties */
public function init()
{
$dir = dirname(__FILE__) . '/assets';
$this->assetsDir = Yii::app()->assetManager->publish($dir);
if ($this->multiple) {
if (isset($this->htmlOptions['multiple']))
$this->multiple = true;
elseif ($this->multiple)
$this->htmlOptions['multiple'] = true;
}
if ($this->multiple) {
if (isset($this->placeholderMultiple))
$this->htmlOptions['data-placeholder'] = $this->placeholderMultiple;
else
$this->htmlOptions['data-placeholder'] = Yii::t('Chosen.main', "Select Some Options");
} else {
if (isset($this->placeholderSingle))
$this->htmlOptions['data-placeholder'] = $this->placeholderSingle;
else
$this->htmlOptions['data-placeholder'] = Yii::t('Chosen.main', "Select an Option");
}
if (isset($this->noResults))
$this->settings['no_results_text'] = $this->noResults;
else
$this->settings['no_results_text'] = Yii::t('Chosen.main', "No results match");
if (!$this->multiple)
$this->settings['allow_single_deselect'] = $this->allowSingleDeselect;
}
/** Render widget html and register client scripts */
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->multiple && substr($name, -2) !== '[]')
$name .= '[]';
if (isset($this->model)) {
echo CHtml::dropDownList($name, CHtml::value($this->model, $this->attribute), $this->data, $this->htmlOptions);
} else {
echo CHtml::dropDownList($name, $this->value, $this->data, $this->htmlOptions);
}
$this->registerScripts($id);
}
/** Register client scripts */
private function registerScripts($id)
{
$cs = Yii::app()->getClientScript();
$cs->registerCoreScript('jquery');
if (defined('YII_DEBUG'))
$cs->registerScriptFile($this->assetsDir . '/chosen.jquery.js');
else
$cs->registerScriptFile($this->assetsDir . '/chosen.jquery.min.js');
$cs->registerCssFile($this->assetsDir . '/chosen.css');
$settings = CJavaScript::encode($this->settings);
$cs->registerScript("{$id}_chosen", "$('#{$id}').chosen({$settings});");
}
/** Single item select */
public static function dropDownList($name, $select, $data, $htmlOptions = array())
{
return Yii::app()->getController()->widget(__CLASS__, array(
'name' => $name,
'value' => $select,
'data' => $data,
'htmlOptions' => $htmlOptions,
), true);
}
public static function activeDropDownList($model, $attribute, $data, $htmlOptions = array())
{
return self::dropDownList(CHtml::activeName($model, $attribute), CHtml::value($model, $attribute), $data, $htmlOptions);
}
/** Multiple items select */
public static function multiSelect($name, $select, $data, $htmlOptions = array())
{
if (substr($name, -2) !== '[]')
$name .= '[]';
return Yii::app()->getController()->widget(__CLASS__, array(
'name' => $name,
'value' => $select,
'data' => $data,
'htmlOptions' => $htmlOptions,
'multiple' => true,
), true);
}
public static function activeMultiSelect($model, $attribute, $data, $htmlOptions = array())
{
return self::multiSelect(CHtml::activeName($model, $attribute) . '[]', CHtml::value($model, $attribute), $data, $htmlOptions);
}
}