|
|
<?php
/* * The MIT License * * Copyright 2019 Blobt. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */
namespace blobt\widgets;
use yii\widgets\InputWidget; use Yii; use yii\base\InvalidConfigException; use yii\helpers\ArrayHelper; use yii\helpers\Html; use blobt\web\Select2Asset;
/** * Description of Select2 * * @author Blobt * @email 380255922@qq.com * @created Aug 20, 2019 */ class Select2 extends InputWidget {
/** * @var array select的选项 */ public $items = [];
/** * @var array select 的html选择 */ public $options;
/** * @var string|bool 默认显示的提示内容,如果不想显示可以设置成false */ public $promptText = '请选择';
/** * @inheritdoc * @throws \ReflectionException * @throws \yii\base\InvalidConfigException */ public function run() { $this->registerAsset(); $this->registerSelect2Js(); return $this->renderSelect(); }
/** * 初始化 */ public function init() { parent::init(); if ($this->hasModel() && !isset($this->options['name'])) { $this->name = $this->options['name'] = Html::getInputName($this->model, $this->attribute); }
if (!empty($this->promptText)) { $this->options = ArrayHelper::merge($this->options, ['prompt' => $this->promptText]); } }
/** * 注册js和css */ protected function registerAsset() { $view = $this->getView(); Select2Asset::register($view); }
/** * 注册js */ protected function registerSelect2Js() { $js = <<<SCRIPT $('#category-icon_type').select2(); SCRIPT; $this->getView()->registerJs($js); }
/** * 渲染一个select * @return string */ protected function renderSelect() { $value = null; if ($this->hasModel()) { $value = ArrayHelper::getValue($this->model, $this->attribute); } return Html::dropDownList($this->name, $value, $this->items, $this->options); }
}
|