/** * Return a closing label tag * * @return string */ public function closeTag() { $result = '</label>'; if ($this->element->hasAttribute('required') && $this->element->getAttribute('required')) { $result = sprintf('<span class="required-mark">*</span> %s', $result); } return $result; }
/** * Override * * Render the captcha * * @param ElementInterface $element * @throws Exception\DomainException * @return string */ public function render(ElementInterface $element) { //we could also set the separator here to break between the inputs and the image. //$this->setSeparator('') $captcha = $element->getCaptcha(); if ($captcha === null || !$captcha instanceof CaptchaAdapter) { throw new DomainException(sprintf('%s requires that the element has a "captcha" attribute of type Recruitment\\Model\\CaptchaImage; none found', __METHOD__)); } $captcha->generate(); $imgAttributes = array('width' => $captcha->getWidth(), 'height' => $captcha->getHeight(), 'alt' => $captcha->getImgAlt(), 'src' => $captcha->getImgUrl() . $captcha->getId() . $captcha->getSuffix(), 'class' => 'thumbnail center-block'); if ($element->hasAttribute('id')) { $imgAttributes['id'] = $element->getAttribute('id') . '-image'; } $closingBracket = $this->getInlineClosingBracket(); $img = sprintf('<img %s%s ', $this->createAttributesString($imgAttributes), $closingBracket); $position = $this->getCaptchaPosition(); $separator = $this->getSeparator(); $captchaInput = $this->renderCaptchaInputs($element); $pattern = '%s' . '<div class="input-group">' . '%s%s' . '<span class="input-group-btn">' . '<button id="' . $element->getAttribute('id') . '-refresh' . '" class="btn btn-default" type="button">' . '<i class="ion-loop"></i>' . '</button>' . '</span>' . '</div>'; if ($position == self::CAPTCHA_PREPEND) { return sprintf($pattern, $captchaInput, $separator, $img); } return sprintf($pattern, $img, $separator, $captchaInput); }
public function __invoke(ElementInterface $element = null) { if ($element && !$element->hasAttribute('class')) { $this->addClasses($element, ['btn', 'btn-default']); } return parent::__invoke($element); }
public function init(ElementInterface $element) { $this->formElement = $element; if ($element->hasAttribute('template')) { $this->template = $element->getAttribute('template'); } }
/** * {@inheritDoc} */ public function render(ElementInterface $element) { $captcha = $element->getCaptcha(); if ($captcha === null || !$captcha instanceof CaptchaAdapter) { throw new Exception\DomainException(sprintf('%s requires that the element has a "captcha" attribute' . ' of type Zend\\Captcha\\Image; none found', __METHOD__)); } // Generates ID, but NOT word and image $captcha->generate(); // Generates URL to access image, and image won't be generated until the URL is accessed $imgSrc = $captcha->getImgUrl() . '?id=' . $captcha->getId(); $imgAttributes = array('width' => $captcha->getWidth(), 'height' => $captcha->getHeight(), 'src' => $imgSrc, 'onclick' => sprintf('this.src=\'%s&refresh=\'+Math.random()', $imgSrc), 'style' => 'cursor: pointer; vertical-align: middle;', 'alt' => __('CAPTCHA image'), 'title' => __('Click to refresh CAPTCHA')); if ($element->hasAttribute('id')) { $imgAttributes['id'] = $element->getAttribute('id') . '-image'; } else { $imgAttributes['id'] = $captcha->getId() . '-image'; } $closingBracket = $this->getInlineClosingBracket(); $img = sprintf('<img %s%s', $this->createAttributesString($imgAttributes), $closingBracket); $position = $this->getCaptchaPosition(); $separator = $this->getSeparator(); $captchaInput = $this->renderCaptchaInputs($element); $pattern = '%s%s%s'; if ($position == static::CAPTCHA_PREPEND) { return sprintf($pattern, $captchaInput, $separator, $img); } return sprintf($pattern, $img, $separator, $captchaInput); }
public function __invoke(ElementInterface $element = null) { if ($element && !$element->hasAttribute('class')) { $this->addClass($element, 'form-control'); } return parent::__invoke($element); }
/** * {@inheritDoc} */ public function render(ElementInterface $element) { if ($element->hasAttribute('class')) { $class = $element->getAttribute('class'); if (strpos($class, 'selectpicker') !== false && $this->getView()->jQuery()->twbs->bootstrapSelect) { if (!$element->hasAttribute('data-width')) { $element->setAttribute('data-width', 'auto'); } if (strpos($class, 'btn-') === false) { $class .= ' btn-default'; } $element->setAttribute('data-style', $class); $element->setAttribute('class', 'selectpicker'); } } return parent::render($element); }
public function __invoke(ElementInterface $element = null, $labelContent = null, $position = null) { // Set $required to a default of true | existing elements required-value $required = $element->hasAttribute('required') ? true : false; if (true === $required) { $labelContent = sprintf('%s<span class="required-mark">*</span>', $labelContent); } return $this->openTag($element) . $labelContent . $this->closeTag(); }
public function render(ElementInterface $element) { if ($element->hasAttribute('data-placeholder')) { $placeholder = $element->getAttribute('data-placeholder'); $placeholder = $this->getTranslator()->translate($placeholder, $this->getTranslatorTextDomain()); $element->setAttribute('data-placeholder', $placeholder); } return parent::render($element); }
public function __invoke(ElementInterface $element = null, $labelContent = null, $position = null) { $labelContent = $element->getLabel(); // Implement all default lines of Zend\Form\View\Helper\FormLabel // Set $required to a default of true | existing elements required-value $required = $element->hasAttribute('required') ? $element->getAttribute('required') : true; if (true === $required && ($labelContent != '' || $labelContent != null || $labelContent != false)) { $labelContent = sprintf('<div class="col-lg-10"><span class="im-required">(*)</span> %s</div>', $labelContent); } elseif (false === $required && ($labelContent != '' || $labelContent != null || $labelContent != false)) { $labelContent = $labelContent; } return $labelContent; }
/** * Utility form helper that renders a label (if it exists), an element and errors * * @param ElementInterface $element * @throws \Zend\Form\Exception\DomainException * @return string */ public function render(ElementInterface $element, $labelPosition = null) { $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $elementHelper = $this->getElementHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); $label = $element->getLabel(); $inputErrorClass = $this->getInputErrorClass(); if (isset($label) && '' !== $label) { // Translate the label if (null !== ($translator = $this->getTranslator())) { $label = $translator->translate($label, $this->getTranslatorTextDomain()); } } // Does this element have errors ? if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . $inputErrorClass; $element->setAttribute('class', $classAttributes); } if ($this->partial) { $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors); return $this->view->render($this->partial, $vars); } $rowOpen = '<div class="form-group">'; $rowClose = '</div>'; $elementString = $elementHelper->render($element); if ($elementErrorsHelper->render($element)) { $rowOpen = '<div class="form-group has-error">'; $elementErrors = $elementErrorsHelper->setMessageOpenFormat('<p class="text-danger">')->setMessageSeparatorString('<br />')->setMessageCloseString('</p>')->render($element); $elementString .= $elementErrors; } // hidden elements do not need a <label> -https://github.com/zendframework/zf2/issues/5607 $type = $element->getAttribute('type'); if (isset($label) && '' !== $label && $type !== 'hidden') { if (!$element instanceof LabelAwareInterface || !$element->getLabelOption('disable_html_escape')) { $label = $escapeHtmlHelper($label); } if ($label !== '' && !$element->hasAttribute('id') || $element instanceof LabelAwareInterface && $element->getLabelOption('always_wrap')) { $label = '<label class="col-sm-3 control-label">' . $label . '</label>'; } $elementString = '<div class="col-sm-9">' . $elementString . '</div>'; // Button element is a special case, because label is always rendered inside it if ($element instanceof Button || $element instanceof Checkbox || $element instanceof Radio) { $label = '<div class="col-sm-3"></div>'; } $markup = $label . $elementString; } else { $markup = $elementString; } return $rowOpen . $markup . $rowClose; }
/** * {@inheritDoc} */ public function render($content, array $attribs = [], ElementInterface $element = null) { if ($element) { $srOnly = $this->getSrOnly(); if (null === $srOnly) { if ($element instanceof LabelAwareInterface) { if (!$element->getLabel()) { return ''; } $srOnly = $element->getLabelOption('sr_only'); } if (null === $srOnly && $element->hasAttribute('placeholder')) { $srOnly = true; } } if ($srOnly) { $attribs = array_merge_recursive($attribs, ['class' => 'sr-only']); } } return parent::render($content, $attribs, $element); }
/** * Render the captcha * * @param ElementInterface $element * @throws Exception\DomainException * @return string */ public function render(ElementInterface $element) { $captcha = $element->getCaptcha(); if ($captcha === null || !$captcha instanceof CaptchaAdapter) { throw new Exception\DomainException(sprintf('%s requires that the element has a "captcha" attribute of type Zend\\Captcha\\Image; none found', __METHOD__)); } $captcha->generate(); $imgAttributes = array('width' => $captcha->getWidth(), 'height' => $captcha->getHeight(), 'alt' => $captcha->getImgAlt(), 'src' => $captcha->getImgUrl() . $captcha->getId() . $captcha->getSuffix()); if ($element->hasAttribute('id')) { $imgAttributes['id'] = $element->getAttribute('id') . '-image'; } $closingBracket = $this->getInlineClosingBracket(); $img = sprintf('<img %s%s', $this->createAttributesString($imgAttributes), $closingBracket); $position = $this->getCaptchaPosition(); $separator = $this->getSeparator(); $captchaInput = $this->renderCaptchaInputs($element); $pattern = '%s%s%s'; if ($position == self::CAPTCHA_PREPEND) { return sprintf($pattern, $captchaInput, $separator, $img); } return sprintf($pattern, $img, $separator, $captchaInput); }
public function render(ElementInterface $element, $labelPosition = null) { $label = $element->getLabel(); if (isset($label) && '' !== $label) { if (null !== ($translator = $this->getTranslator())) { $label = $translator->translate($label, $this->getTranslatorTextDomain()); } } if (is_null($labelPosition)) { $labelPosition = $this->labelPosition; } // $inputErrorClass = $this->getInputErrorClass(); // if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { // $element = $this->addClass($element, $inputErrorClass); // } if ($this->partial) { $vars = ['element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $labelPosition, 'renderErrors' => $this->renderErrors]; return $this->view->render($this->partial, $vars); } $labelHelper = $this->getLabelHelper(); $elementHelper = $this->getElementHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); if ($element->getOption('form-horizontal')) { $labelCols = (int) $element->getOption('label-cols') ?: 3; $inputCols = (int) $element->getOption('input-cols') ?: 12 - $labelCols; } if (isset($label) && '' !== $label && $element->getAttribute('type') !== 'hidden') { $attributes = ['class' => 'control-label']; if (isset($labelCols)) { $attributes['class'] .= sprintf(' col-sm-%d', $labelCols); } if ($element->hasAttribute('id')) { $attributes['for'] = $element->getAttribute('id'); } $labelString = $labelHelper->openTag($attributes) . $label . $labelHelper->closeTag(); } else { $labelString = ''; } $elementString = $elementHelper->render($element); if ($this->renderErrors) { $errorsString = $elementErrorsHelper->render($element); } else { $errorsString = ''; } $arguments = ['class' => 'form-group']; if (count($element->getMessages()) > 0) { $arguments['class'] .= ' ' . $this->inputErrorClass; } $html = $this->openTag($arguments); if ($labelPosition === self::LABEL_PREPEND) { $html .= $labelString; } if (isset($inputCols)) { $attributes = ['class' => sprintf('col-sm-%d', $inputCols)]; if ($labelString === '') { $attributes['class'] .= sprintf(' col-sm-offset-%d', $labelCols); } $html .= sprintf('<div %s>', $this->createAttributesString($attributes)); } $prependMarkup = $element->getOption('prepend-markup') ?: ''; $appendMarkup = $element->getOption('append-markup') ?: ''; $html .= $prependMarkup; $html .= $elementString; $html .= $appendMarkup; $html .= $errorsString; if (isset($inputCols)) { $html .= '</div>'; } if ($labelPosition === self::LABEL_APPEND) { $html .= $labelString; } $html .= '</div>'; return $html; }
public function render(ElementInterface $element, $isHorizontal = false, $labelColumns = 2) { $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $labelHelper = $this->getLabelHelper(); $elementHelper = $this->getElementHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); $label = $element->getLabel(); $inputErrorClass = $this->getInputErrorClass(); if (isset($label) && '' !== $label) { // Translate the label if (null !== ($translator = $this->getTranslator())) { $label = $translator->translate($label, $this->getTranslatorTextDomain()); } } $type = $element->getAttribute('type'); if ($type != 'checkbox' && $type != 'submit' && $type != 'button' && $type != 'radio' && $type != 'file' && $type != 'multi_checkbox') { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . 'form-control'; $element->setAttribute('class', $classAttributes); } elseif ($type == 'button' || $type == 'submit') { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . 'btn'; $element->setAttribute('class', $classAttributes); } // Does this element have errors ? if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . $inputErrorClass; $element->setAttribute('class', $classAttributes); } if ($this->partial) { $vars = ['element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors]; return $this->view->render($this->partial, $vars); } $elementErrors = ''; if ($this->renderErrors) { $elementErrors = $elementErrorsHelper->render($element, ['class' => 'text-danger']); } $elementString = $elementHelper->render($element); $addonAppend = $element->getOption('addon-append'); $addonPrepend = $element->getOption('addon-prepend'); if ($addonAppend !== null || $addonPrepend !== null) { $addonString = '<div class="input-group">'; $addonString .= $this->addAddon($addonPrepend); $addonString .= $elementString; $addonString .= $this->addAddon($addonAppend); $addonString .= '</div>'; $elementString = $addonString; } $elementString .= $this->getHelpBlock($element); // hidden elements do not need a <label> -https://github.com/zendframework/zf2/issues/5607 if (isset($label) && '' !== $label && $type !== 'hidden') { $labelAttributes = []; if ($element instanceof LabelAwareInterface) { $labelAttributes = $element->getLabelAttributes(); } if (!$element instanceof LabelAwareInterface || !$element->getLabelOption('disable_html_escape')) { $label = $escapeHtmlHelper($label); } if (empty($labelAttributes)) { $labelAttributes = $this->labelAttributes; } if (!$element->getAttribute('id') && $element->getName()) { $element->setAttribute('id', $element->getName()); } if ($element->getAttribute('id')) { $labelAttributes['for'] = $element->getAttribute('id'); } if ($isHorizontal) { $labelAttributes['class'] = ' control-label col-sm-' . $labelColumns; if ($element instanceof LabelAwareInterface) { $element->setLabelAttributes(['class' => 'control-label col-sm-' . $labelColumns]); } } else { $labelAttributes['class'] = ' control-label'; if ($element instanceof LabelAwareInterface) { $element->setLabelAttributes(['class' => 'control-label']); } } // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested // labels. The semantic way is to group them inside a fieldset if (!$isHorizontal && ($type === 'multi_checkbox' || $type === 'radio' || $element instanceof MonthSelect)) { $markup = sprintf('<fieldset class="radio"><legend>%s</legend>%s</fieldset>', $label, $elementString); } elseif ($type == 'checkbox') { // Checkboxes need special treatment too if ($isHorizontal) { $markup = '<div class="form-group"><div class="checkbox col-xs-' . (12 - $labelColumns) . ' col-xs-offset-' . $labelColumns . '"><label>' . $elementString . $label . '</label></div></div>'; } else { $markup = '<div class="checkbox"><label>' . $elementString . $label . '</label></div>'; } } else { // Ensure element and label will be separated if element has an `id`-attribute. // If element has label option `always_wrap` it will be nested in any case. if ($element->hasAttribute('id') && ($element instanceof LabelAwareInterface && !$element->getLabelOption('always_wrap'))) { $labelOpen = ''; $labelClose = ''; $label = $labelHelper($element); } else { $labelOpen = $labelHelper->openTag($labelAttributes); $labelClose = $labelHelper->closeTag(); } if ($label !== '' && !$element->hasAttribute('id') || $element instanceof LabelAwareInterface && $element->getLabelOption('always_wrap')) { $label = '<span>' . $label . '</span>'; } $addDivClass = ''; // Button element is a special case, because label is always rendered inside it if ($element instanceof Button) { $labelOpen = $labelClose = $label = ''; $addDivClass = ' col-xs-offset-' . $labelColumns; } if ($type == 'radio') { $addDivClass = ' radio'; } switch ($this->labelPosition) { case self::LABEL_PREPEND: if ($isHorizontal) { $markup = sprintf($this->horizontalRowWrapper, !empty($elementErrors) ? ' has-error' : '', $labelOpen . $label . $labelClose, 12 - $labelColumns, $addDivClass, $elementString . ($this->renderErrors ? $elementErrors : ''), ''); } else { $markup = sprintf($this->rowWrapper, !empty($elementErrors) ? ' has-error' : '', $labelOpen . $label . $labelClose, $elementString); } break; case self::LABEL_APPEND: default: if ($isHorizontal) { $markup = sprintf($this->horizontalRowWrapper, !empty($elementErrors) ? ' has-error' : '', '', 12 - $labelColumns, $addDivClass, $elementString . ($this->renderErrors ? $elementErrors : ''), $labelOpen . $label . $labelClose); } else { $markup = sprintf($this->rowWrapper, !empty($elementErrors) ? ' has-error' : '', $elementString, $labelOpen . $label . $labelClose); } break; } } if (!$isHorizontal && $this->renderErrors) { $markup .= $elementErrors; } } else { if ($isHorizontal && $this->labelPosition == self::LABEL_PREPEND && $type !== 'hidden') { $markup = sprintf($this->horizontalRowWrapper, !empty($elementErrors) ? ' has-error' : '', '', 12 - $labelColumns, ' col-xs-offset-' . $labelColumns, $elementString . ($this->renderErrors ? $elementErrors : ''), ''); } else { if ($this->renderErrors) { $markup = $elementString . $elementErrors; } else { $markup = $elementString; } } } return $markup; }
/** * Utility form helper that renders a label (if it exists), an element and errors * * @param ElementInterface $element * @throws \Zend\Form\Exception\DomainException * @return string */ public function render(ElementInterface $element, $labelPosition = null) { $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $elementHelper = $this->getElementHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); $label = $element->getLabel(); $inputErrorClass = $this->getInputErrorClass(); if (isset($label) && '' !== $label) { // Translate the label if (null !== ($translator = $this->getTranslator())) { $label = $translator->translate($label, $this->getTranslatorTextDomain()); } } // Does this element have errors ? if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . $inputErrorClass; $element->setAttribute('class', $classAttributes); } if ($this->partial) { $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors); return $this->view->render($this->partial, $vars); } $rowOpen = '<div class="form-group">'; $rowClose = '</div>'; $elementString = $elementHelper->render($element); if ($elementErrorsHelper->render($element)) { $rowOpen = '<div class="form-group has-error">'; $elementErrors = $elementErrorsHelper->setMessageOpenFormat('<p class="text-danger">')->setMessageSeparatorString('<br />')->setMessageCloseString('</p>')->render($element); $elementString .= $elementErrors; } // hidden elements do not need a <label> -https://github.com/zendframework/zf2/issues/5607 $type = $element->getAttribute('type'); if (isset($label) && '' !== $label && $type !== 'hidden') { $labelAttributes = array(); if ($element instanceof LabelAwareInterface) { $labelAttributes = $element->getLabelAttributes(); } if (!$element instanceof LabelAwareInterface || !$element->getLabelOption('disable_html_escape')) { $label = $escapeHtmlHelper($label); } if (empty($labelAttributes)) { $labelAttributes = $this->labelAttributes; } // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested // labels. The semantic way is to group them inside a fieldset if ($type === 'multi_checkbox' || $type === 'radio' || $element instanceof MonthSelect || $element instanceof Captcha) { $markup = sprintf('<fieldset><legend>%s</legend>%s</fieldset>', $label, $elementString); } else { if ($label !== '' && !$element->hasAttribute('id') || $element instanceof LabelAwareInterface && $element->getLabelOption('always_wrap')) { $label = '<label>' . $label . '</label>'; } // Button element is a special case, because label is always rendered inside it if ($element instanceof Button || $element instanceof Checkbox || $element instanceof Radio) { $label = ''; } $markup = $label . $elementString; } } else { $markup = $elementString; } return $rowOpen . $markup . $rowClose; }
/** * Utility form helper that renders a label (if it exists), an element and errors * * @param ElementInterface $element * @param null|string $labelPosition * @throws \Zend\Form\Exception\DomainException * @return string */ public function render(ElementInterface $element, $labelPosition = null) { $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $labelHelper = $this->getLabelHelper(); $elementHelper = $this->getElementHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); $label = $element->getLabel(); $inputErrorClass = $this->getInputErrorClass(); if (is_null($labelPosition)) { $labelPosition = $this->labelPosition; } if (isset($label) && '' !== $label) { // Translate the label if (null !== ($translator = $this->getTranslator())) { $label = $translator->translate($label, $this->getTranslatorTextDomain()); } } // Does this element have errors ? if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . $inputErrorClass; $element->setAttribute('class', $classAttributes); } if ($this->partial) { $vars = ['element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $labelPosition, 'renderErrors' => $this->renderErrors]; return $this->view->render($this->partial, $vars); } if ($this->renderErrors) { $elementErrors = $elementErrorsHelper->render($element); } $elementString = $elementHelper->render($element); // hidden elements do not need a <label> -https://github.com/zendframework/zf2/issues/5607 $type = $element->getAttribute('type'); if (isset($label) && '' !== $label && $type !== 'hidden') { $labelAttributes = []; if ($element instanceof LabelAwareInterface) { $labelAttributes = $element->getLabelAttributes(); } if (!$element instanceof LabelAwareInterface || !$element->getLabelOption('disable_html_escape')) { $label = $escapeHtmlHelper($label); } if (empty($labelAttributes)) { $labelAttributes = $this->labelAttributes; } // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested // labels. The semantic way is to group them inside a fieldset if ($type === 'multi_checkbox' || $type === 'radio' || $element instanceof MonthSelect || $element instanceof Captcha) { $markup = sprintf('<fieldset><legend>%s</legend>%s</fieldset>', $label, $elementString); } else { // Ensure element and label will be separated if element has an `id`-attribute. // If element has label option `always_wrap` it will be nested in any case. if ($element->hasAttribute('id') && ($element instanceof LabelAwareInterface && !$element->getLabelOption('always_wrap'))) { $labelOpen = ''; $labelClose = ''; $label = $labelHelper->openTag($element) . $label . $labelHelper->closeTag(); } else { $labelOpen = $labelHelper->openTag($labelAttributes); $labelClose = $labelHelper->closeTag(); } if ($label !== '' && !$element->hasAttribute('id') || $element instanceof LabelAwareInterface && $element->getLabelOption('always_wrap')) { $label = '<span>' . $label . '</span>'; } // Button element is a special case, because label is always rendered inside it if ($element instanceof Button) { $labelOpen = $labelClose = $label = ''; } if ($element instanceof LabelAwareInterface && $element->getLabelOption('label_position')) { $labelPosition = $element->getLabelOption('label_position'); } switch ($labelPosition) { case self::LABEL_PREPEND: $markup = $labelOpen . $label . $elementString . $labelClose; break; case self::LABEL_APPEND: default: $markup = $labelOpen . $elementString . $label . $labelClose; break; } } if ($this->renderErrors) { $markup .= $elementErrors; } } else { if ($this->renderErrors) { $markup = $elementString . $elementErrors; } else { $markup = $elementString; } } return $markup; }
/** * Utility form helper that renders a label (if it exists), an element and errors * * @param ElementInterface $element * @throws \Zend\Form\Exception\DomainException * @return string */ public function render(ElementInterface $element) { // render function complains if I add the $options param, so we need to catch it like this $options = func_num_args() > 1 ? func_get_arg(1) : array(); $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $labelHelper = $this->getLabelHelper(); $elementHelper = $this->getElementHelper(); $helpBlockHelper = $this->getHelpBlockHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); $label = $element->getLabel(); $helpBlock = $element->getOption('helpblock'); $inputErrorClass = $this->getInputErrorClass(); // if I have a label, try and translate it if (isset($label) && '' !== $label) { // Translate the label if (null !== ($translator = $this->getTranslator())) { $label = $translator->translate($label, $this->getTranslatorTextDomain()); } } // if element does not have and ID, create one out of it's name if (!$element->hasAttribute('id')) { $name = $element->getAttribute('name'); if (empty($name)) { $name = 'input'; } if (empty($this->counterName[$name])) { $this->counterName[$name] = 0; } $element->setAttribute('id', trim($name, "\t\n\r\v []<>{}") . '-' . $this->counterName[$name]); $this->counterName[$name]++; } // Does this element have errors ? if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . $inputErrorClass; $element->setAttribute('class', $classAttributes); } // if I have a partial for this element if ($this->partial) { $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors); return $this->view->render($this->partial, $vars); } // render errors if ($this->renderErrors) { $elementErrors = $elementErrorsHelper->render($element); } // render element $elementString = $elementHelper->render($element); // label if (isset($label) && '' !== $label) { $label = $escapeHtmlHelper($label); $labelAttributes = $element->getLabelAttributes(); if (empty($labelAttributes)) { $labelAttributes = $this->labelAttributes; } // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested // labels. The semantic way is to group them inside a fieldset $type = $element->getAttribute('type'); if ($type === 'checkbox' || $type == 'radio') { if (empty($labelAttributes)) { $labelAttributes = array('class' => 'checkbox'); } if ($labelAttributes instanceof LabelOptionsAwareInterface) { $attributes = $labelAttributes->getLabelAttributes(); $attributes['class'] = 'checkbox' . (empty($attributes['class']) ? '' : ' ' . $attributes['class']); $labelAttributes->setLabelAttributes($attributes); } } if ($type === 'multi_checkbox' || $type === 'radio') { $markup = sprintf('<label class="control-label">%s</label>%s', $label, str_replace('control-label ', '', $elementString)); } else { if ($element->hasAttribute('id')) { $labelOpen = ''; $labelClose = ''; if ($type === 'checkbox' || $type === 'radio') { $element->setLabelAttributes($labelAttributes); } $label = $labelHelper($element, null, null, $options); } else { $labelOpen = $labelHelper->openTag($labelAttributes, $options); $labelClose = $labelHelper->closeTag(); } // var_dump(array($label, $labelOpen, $labelClose)); // Button element is a special case, because label is always rendered inside it if ($element instanceof Button) { $labelOpen = $labelClose = $label = ''; } if (($type === 'checkbox' || $type === 'radio') && Form::getBootstrapType() !== Form::HORIZONTAL) { $label = $labelOpen . $label . $labelClose; $label = preg_replace('/(<label[^>]+>)/i', '$1%s ', $label); $markup = sprintf($label, $elementString); } else { switch ($this->labelPosition) { case self::LABEL_PREPEND: $markup = $labelOpen . $label . $elementString . $labelClose; break; case self::LABEL_APPEND: default: $markup = $labelOpen . $elementString . $label . $labelClose; break; } } // var_dump($markup); } } if ($this->renderErrors) { $markup = (empty($markup) ? $elementString : $markup) . $elementErrors; } /*else { $markup = $elementString; }*/ if (isset($helpBlock) && '' !== $helpBlock) { $markup .= $helpBlockHelper->openTag($element->getOption('helpblock_attributes'), $element->getOption('helpblock_mode')) . $helpBlock . $helpBlockHelper->closeTag(); } // if type is horizontal or vertical, start wrapping if (Form::getBootstrapType() === Form::VERTICAL) { $markup = sprintf('<div class="control-group%s"><div class="controls">%s</div></div>', count($element->getMessages()) ? ' error' : '', $markup); } elseif (Form::getBootstrapType() === Form::HORIZONTAL) { $pos = strpos($markup, '</label'); if ($pos !== FALSE && $pos > 0) { $pos += 8; $markup2 = substr($markup, 0, $pos) . '<div class="controls">' . substr($markup, $pos) . '</div>'; $markup = sprintf('<div class="control-group%s">%s</div>', count($element->getMessages()) ? ' error' : '', $markup2); } } return $markup; }
public function render(ElementInterface $element, $labelPosition = null) { $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $labelHelper = $this->getLabelHelper(); $elementHelper = $this->getElementHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); $label = $element->getLabel(); $inputErrorClass = $this->getInputErrorClass(); if (isset($label) && '' !== $label) { // Translate the label if (null !== ($translator = $this->getTranslator())) { $label = $translator->translate($label, $this->getTranslatorTextDomain()); } } // Does this element have errors ? if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . $inputErrorClass; $element->setAttribute('class', $classAttributes); } if ($this->partial) { $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors); return $this->view->render($this->partial, $vars); } if ($this->renderErrors) { $elementErrors = $elementErrorsHelper->render($element); } $elementString = $elementHelper->render($element); if (isset($label) && '' !== $label) { $label = $escapeHtmlHelper($label); $labelAttributes = $element->getLabelAttributes(); if (empty($labelAttributes)) { $labelAttributes = $this->labelAttributes; } // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested // labels. The semantic way is to group them inside a fieldset $type = $element->getAttribute('type'); if ($type === 'multi_checkbox' || $type === 'radio') { $markup = sprintf('<fieldset><legend>%s</legend>%s</fieldset>', $label, $elementString); } else { if ($element->hasAttribute('id')) { $labelOpen = ''; $labelClose = ''; $label = $labelHelper($element); } else { $labelOpen = $labelHelper->openTag($labelAttributes); $labelClose = $labelHelper->closeTag(); } if ($label !== '' && !$element->hasAttribute('id')) { $label = '<span>' . $label . '</span>'; } // Button element is a special case, because label is always rendered inside it if ($element instanceof Button) { $labelOpen = $labelClose = $label = ''; } switch ($this->labelPosition) { case self::LABEL_PREPEND: $markup = $labelOpen . $label . $elementString . $labelClose; break; case self::LABEL_APPEND: default: $markup = $labelOpen . $elementString . $label . $labelClose; break; } } if ($this->renderErrors) { $markup .= $elementErrors; } } else { if (!empty($this->renderErrors)) { $markup = $elementString . $elementErrors; } else { $markup = $elementString; } } return $markup; }
public function render(ElementInterface $element) { $escapeHtmlHelper = $this->getEscapeHtmlHelper(); $labelHelper = $this->getLabelHelper(); $elementHelper = $this->getElementHelper(); $elementErrorsHelper = $this->getElementErrorsHelper(); $label = $element->getLabel(); $inputErrorClass = $this->getInputErrorClass(); if (isset($label) && '' !== $label) { // Translate the label if (null !== ($translator = $this->getTranslator())) { $label = $translator->translate($label, $this->getTranslatorTextDomain()); } } // Does this element have errors ? if (count($element->getMessages()) > 0 && !empty($inputErrorClass)) { $classAttributes = $element->hasAttribute('class') ? $element->getAttribute('class') . ' ' : ''; $classAttributes = $classAttributes . $inputErrorClass; $element->setAttribute('class', $classAttributes); } if ($this->partial) { $vars = array('element' => $element, 'label' => $label, 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors); return $this->view->render($this->partial, $vars); } if ($this->renderErrors) { $elementErrors = $elementErrorsHelper->render($element); } if ($element->getOption('current_user')) { $element->setValue(NULL); } $this->defineWidthElement(&$element); $elementString = $elementHelper->render($element); $labelAttributes = $element->getOption("labelAttributes"); $labelRequired = ""; if ($labelAttributes['required']) { $labelRequired = "<b class='required'>*</b>"; } if (isset($label) && '' !== $label) { $label = $escapeHtmlHelper($label); $labelAttributes = $element->getLabelAttributes(); if (empty($labelAttributes)) { $labelAttributes = $this->labelAttributes; } // Multicheckbox elements have to be handled differently as the HTML standard does not allow nested // labels. The semantic way is to group them inside a fieldset $type = $element->getAttribute('type'); if ($element->hasAttribute('id')) { $labelOpen = ''; $labelClose = ''; $label = $labelHelper($element); } else { $labelOpen = $labelHelper->openTag($labelAttributes); $labelClose = $labelHelper->closeTag(); } if ($label !== '' && !$element->hasAttribute('id')) { $label = '<span>' . $label . ' ' . $labelRequired . '</span>'; } // Button element is a special case, because label is always rendered inside it if ($element instanceof Button) { $labelOpen = $labelClose = $label = ''; } switch ($this->labelPosition) { case self::LABEL_PREPEND: $markup = $labelOpen . $label . $elementString . $labelClose; break; case self::LABEL_APPEND: default: $markup = $labelOpen . $elementString . $label . $labelClose; break; } if ($this->renderErrors) { $markup .= $elementErrors; } } else { if ($this->renderErrors) { $markup = $elementString . $elementErrors; } else { $markup = $elementString; } } return "<div id='{$element->getName()}'>" . $markup . "</div>"; }
/** * Render. * * @param Select|ElementInterface $element * @param string $groupWrapper * @param string $controlWrapper * * @return string */ public function render(ElementInterface $element, $groupWrapper = null, $controlWrapper = null) { $labelHelper = $this->getLabelHelper(); $escapeHelper = $this->getEscapeHtmlHelper(); $elementHelper = $this->getElementHelper(); $elementErrorHelper = $this->getElementErrorHelper(); $descriptionHelper = $this->getDescriptionHelper(); $groupWrapper = $groupWrapper ?: $this->groupWrapper; $controlWrapper = $controlWrapper ?: $this->controlWrapper; /* * Disable by default the inArrayValidator */ $element->setDisableInArrayValidator(true); $elementHelper->getView(); $id = $element->getAttribute('id') ?: $element->getAttribute('name'); $element->setAttribute('class', 'form-control'); $controlLabel = ''; $label = $element->getLabel(); if (strlen($label) === 0) { $label = $element->getOption('label') ?: $element->getAttribute('label'); } if ($label && !$element->getOption('skipLabel')) { $controlLabel .= $labelHelper->openTag(['class' => 'col-lg-3 ' . ($element->getOption('wrapCheckboxInLabel') ? 'checkbox' : 'control-label')] + ($element->hasAttribute('id') ? ['for' => $id] : [])); if (null !== ($translator = $labelHelper->getTranslator())) { $label = $translator->translate($label, $labelHelper->getTranslatorTextDomain()); } if ($element->getOption('wrapCheckboxInLabel')) { $controlLabel .= $elementHelper->render($element) . ' '; } if ($element->getOption('skipLabelEscape')) { $controlLabel .= $label; } else { $controlLabel .= $escapeHelper($label); } $controlLabel .= $labelHelper->closeTag(); } if ($element->getOption('wrapCheckboxInLabel')) { $controls = $controlLabel; $controlLabel = ''; } else { $controls = $elementHelper->render($element); } $controls = str_replace(['<select'], ['<select class="select-picker-contact" data-live-search="true"'], $controls); /*** * Now apply the magic */ if ($element->isMultiple()) { $controls = str_replace(['data-live-search="true"'], ['multiple data-live-search="true"'], $controls); } $html = $controlLabel . sprintf($controlWrapper, $id, $controls, $descriptionHelper->render($element), $elementErrorHelper->render($element)); $addtClass = $element->getMessages() ? ' has-error' : ''; return sprintf($groupWrapper, $addtClass, $id, $html); }
public function openTag(ElementInterface $element) { $disabled = $element->hasAttribute('disabled') ? ' disabled' : ''; $inline = $element->hasAttribute('inline') ? ' checkbox-inline' : ''; return sprintf('<div class="checkbox%s%s"><label>', $disabled, $inline); }