public function buildContent() { $TLM = TimeLineManager::inst(); $insts = $TLM->getEntityClassInsts(); if (empty($insts)) { return; //Нет временных шкал для показа } $idents = array_keys($insts); $options = array(); /** @var TimeLineBuilderBase */ foreach ($insts as $ident => $inst) { $options[] = array('content' => $inst->getTitle(), 'value' => $this->getPageUrl(array('type' => $ident))); } usort($options, function ($e1, $e2) { return strcasecmp($e1['content'], $e2['content']); }); $current = RequestArrayAdapter::inst()->str('type'); $current = $current && in_array($current, $idents) ? $current : $idents[0]; $select = PsHtml::select(array('class' => 'switcher'), $options, $this->getPageUrl(array('type' => $current))); /* * В данный момент мы определили идентификатор временной шкалы и построили элемент $select, * можем строить страницу. */ $params['body'] = $TLM->fetchTplWithResources($current); $params['select'] = $select; return $this->getFoldedEntity()->fetchTpl($params); }
function smarty_block_choice($params, $content, Smarty_Internal_Template &$smarty) { $ctxtParams = SmartyBlockContext::getInstance()->registerBlock($content, __FUNCTION__); if (!$content) { return; } //<select name="$name" /> || <input type="checkbox|readio" name="$name" /> $name = array_get_value('name', $params); //Если передан label, то поле будет отображено, как field формы $label = array_get_value('label', $params); //Текущее значение $curVal = array_get_value_unset('value', $params); //Текущее значение $choiceType = array_get_value_unset('type', $params); //Значения $options = array_get_value(SmartyBlockContext::CHOICE_OPTION, $ctxtParams); if (isEmpty($options)) { return; //--- } switch ($choiceType) { case 'combo': case 'select': echo $label ? PsHtmlForm::select($label, $name, $params, $options, $curVal) : PsHtml::select($params, $options, $curVal); break; case 'check': case 'checkboxes': echo $label ? PsHtmlForm::checkboxes($label, $name, $options, $curVal) : PsHtml::checkboxes($name, $options, $curVal); break; case 'radio': case 'radios': echo $label ? PsHtmlForm::radios($label, $name, $options, $curVal) : PsHtml::radios($name, $options, $curVal); break; default: echo PsHtml::divErr("Неизвестный тип выбора: [{$choiceType}]"); } }
public static function select($label, $fieldId, $selectAttrs = array(), $options = array(), $curVal = null, $hasEmpty = false, $help = null) { $selectAttrs['name'] = $fieldId; /* * Пока не будем комбо-боксы для Да/Нет заменять на радиокнопки * if (count($options) == 2) { $y = false; $n = false; foreach ($options as $option) { $y = $y || ($option['value'] == 1 && $option['content'] == 'Да'); $n = $n || ($option['value'] == 0 && $option['content'] == 'Нет'); } if ($y && $n) { return self::radios($label, $fieldId, $options, $curVal); } } */ return self::field($label, PsHtml::select($selectAttrs, $options, $curVal, $hasEmpty), $help); }
public function zonesSelectHtml() { if (!isset($this->selectHtml)) { $currentZone = $this->getCurrentDateTimeZone()->getName(); $zones = array(); foreach (DateTimeZone::listIdentifiers() as $tzName) { $tz = $this->getDateTimeZone($tzName); //#1 if ($tz) { $offsetS = $tz->getOffset(new DateTime()); // -- Сдвиг в секундах $sign = $offsetS < 0 ? '-' : '+'; $secARR = DatesTools::inst()->parseSeconds($offsetS); $offsetH = $secARR['hf']; $offsetM = $secARR['m']; $gmt = number_format("{$offsetH}.{$offsetM}", 2, ":", ""); $gmt = "GMT {$sign}{$gmt}"; $tzName = $tz->getName(); $option['value'] = $tzName; $option['offset'] = $offsetS; $option['content'] = "{$tzName} ({$gmt})"; if ($tzName == $currentZone) { $option['class'] = 'current'; $option['selected'] = 1; } $zones[] = $option; } //#1 } $selectAttrs['class'] = 'time_zones'; $selectAttrs['name'] = FORM_PARAM_TIMEZONE; /* * Мы не передаём $currentZone внутрь, так как нам нужно ещё установить * класс, который потом будет использован в js. */ $this->selectHtml = PsHtml::select($selectAttrs, $zones); } return $this->selectHtml; }