* @copyright Tamaranga */ class Select extends Input { /** * @var mixed настройка невыбранного значения * false - не добавлять вариант "Не выбрано"; * string - название; * array(id,title) - id + название * callable - функция, вызываемая перед отрисовкой, должна вернуть один из вышеперечисленных вариантов */ protected $empty = null; /** @var array|callable|bool список вариантов значений ['id' => ['id' => id, 'title' => title] */ protected $options = []; /** @var string ключ ID пунктов */ protected $optionsID = 'id'; /** @var string ключ названия пунктов */ protected $optionsTitle = 'title'; /** @var array дополнительные "data-" атрибуты */ protected $optionsDataAttributes = []; /** @var bool показывать описания к вариантам значений */ protected $showHelp = false; /** @var bool владелец дин свойств */ public $ownerDP = false; /** * Инициализация поля * @return bool */ public function init() { if (! parent::init()) { return false; } $this->setTemplateName('select'); $this->isUnionAllowed = true; return true; } /** * Генерация основного контента поля * @param array $data @ref данные * @return string HTML */ public function view(array &$data = []) { if (! isset($data['name'])) { $data['name'] = ''; } $data['attr'] = $this->attr; $empty = false; if (! empty($this->empty)) { if (is_callable($this->empty)) { $empty = call_user_func($this->empty, $this); } else { $empty = $this->empty; } } $options = ''; if (is_callable($this->options)) { $options = call_user_func($this->options, $this); } else if (is_array($this->options) || is_string($this->options)) { $options = $this->options; } $data['help'] = []; if (is_array($options)) { if ($this->showHelp) { foreach ($options as $v) { if (empty($v['help'])) { continue; } if (! isset($v[$this->optionsID])) { continue; } $key = $v[$this->optionsID]; if (is_bool($key)) { $key = (int)$key; } $data['help'][$key] = $v['help']; } if (empty($data['help'])) { $this->showHelp = false; } } } $data['showHelp'] = $this->showHelp; if (is_array($options)) { $options = HTML::selectOptions($options, $this->value(), $empty, $this->optionsID, $this->optionsTitle, $this->optionsDataAttributes); } $data['options'] = $options; return $this->render($data); } /** * Добавление