public function __invoke(ElementInterface $element = null) { if (!empty($element->getMessages())) { $messages = $element->getMessages(); return sprintf('<span class="glyphicon glyphicon-warning-sign form-control-feedback" data-toggle="tooltip" title="%s" ></span>', current($messages)); } }
public function render(ElementInterface $element = null) { if ($element->getMessages()) { $element->setAttribute('class', 'error ' . $element->getAttribute('class')); } return parent::render($element); }
/** * Render validation errors for the provided $element * * @param ElementInterface $element * @param array $attributes * @throws Exception\DomainException * @return string */ public function render(ElementInterface $element, array $attributes = array()) { $messages = $element->getMessages(); if (empty($messages)) { return ''; } if (!is_array($messages) && !$messages instanceof Traversable) { throw new Exception\DomainException(sprintf('%s expects that $element->getMessages() will return an array or Traversable; received "%s"', __METHOD__, is_object($messages) ? get_class($messages) : gettype($messages))); } // Prepare attributes for opening tag $attributes = array_merge($this->attributes, $attributes); $attributes = $this->createAttributesString($attributes); if (!empty($attributes)) { $attributes = ' ' . $attributes; } // Flatten message array $escapeHtml = $this->getEscapeHtmlHelper(); $messagesToPrint = array(); $self = $this; array_walk_recursive($messages, function ($item) use(&$messagesToPrint, $escapeHtml, $self) { if (null !== ($translator = $self->getTranslator())) { $item = $translator->translate($item, $self->getTranslatorTextDomain()); } $messagesToPrint[] = $escapeHtml($item); }); if (empty($messagesToPrint)) { return ''; } // Generate markup $markup = sprintf($this->getMessageOpenFormat(), $attributes); $markup .= implode($this->getMessageSeparatorString(), $messagesToPrint); $markup .= $this->getMessageCloseString(); return $markup; }
/** * Render CSS class for the provided $element * * @param ElementInterface $element * @param array $attributes * @throws Exception\DomainException * @return string */ public function render(ElementInterface $element, array $attributes = array()) { $messages = $element->getMessages(); if (empty($messages)) { return self::CLASS_NO_ERRORS; } return ' ' . self::CLASS_HAS_ERRORS; }
/** * render * * Render the view helper as a HTML string. * * @param ElementInterface $element The form element that should be rendered. * @param array $options Optional view helper options. * * @return string */ public function render(ElementInterface $element, array $options = []) { $messages = $element->getMessages(); if (!empty($messages)) { $this->setAttribute('class', array_merge($this->getAttribute('class', []), ['has-error'])); } return parent::render($element, $options); }
public function __invoke(ElementInterface $element = null) { $messages = $element->getMessages(); if (empty($messages)) { return ''; } return sprintf('<div id="cph_Main_ctl00_notification_rptNotice_divMessage_0" class="alert">%s<button data-dismiss="alert" class="close">×</button> </div>', current($messages)); }
/** * Returns the control group open tag * @param ElementInterface $element * @return string */ public function openTag(ElementInterface $element) { $class = 'control-group'; if ($element->getMessages()) { $class .= ' error'; } $html = '<div class="' . $class . '">'; return $html; }
public function __invoke(ElementInterface $elements = null) { if (empty($elements)) { return ""; } $message = $elements->getMessages(); return sprintf('<span class="error help-inline"> %s </span>', current($message)); }
/** * {@inheritDoc} */ public function render(ElementInterface $element, array $attributes = []) { $markup = ''; $renderer = $this->getView(); if (!method_exists($renderer, 'plugin')) { return $markup; } /* @var $flashMessenger \Zend\View\Helper\FlashMessenger */ $flashMessenger = $renderer->plugin('flashmessenger'); if ($flashMessenger->hasCurrentMessages() || $element->getMessages()) { $formName = $element->getName(); foreach ($this->classMessages as $namespace => $class) { $attribs = $attributes; if ($namespace === PluginFlashMessenger::NAMESPACE_ERROR) { $flashMessenger->setTranslatorTextDomain($this->getTranslatorTextDomain()); if (!$this->getMessageOpenFormat()) { $this->setMessageOpenFormat($flashMessenger->getMessageOpenFormat()); } if (!$this->getMessageSeparatorString()) { $this->setMessageSeparatorString($flashMessenger->getMessageSeparatorString()); } if (!$this->getMessageCloseString()) { $this->setMessageCloseString($flashMessenger->getMessageCloseString()); } if ($flashMessenger->hasCurrentMessages() && ($messages = $flashMessenger->getCurrentMessagesFromNamespace("{$formName}-{$namespace}"))) { $element->setMessages(array_merge($element->getMessages(), $messages)); } if (isset($attribs['class'])) { $attribs['class'] .= ' ' . $class; } else { $attribs['class'] = $class; } $markup .= parent::render($element, $attribs); } elseif ($flashMessenger->hasCurrentMessages()) { if (isset($attribs['class'])) { $class = array_merge((array) $attribs['class'], (array) $class); } $markup .= $flashMessenger->renderCurrent("{$formName}-{$namespace}", (array) $class); } } } return $markup; }
/** * Returns the control group open tag * @param ElementInterface $element * @return string */ public function openTag(ElementInterface $element) { $class = 'control-group'; $id = 'cgroup-' . $element->getName(); if ($element->getMessages()) { $class .= ' error'; } $html = sprintf('<div class="%s" id="%s">', $class, $id); return $html; }
/** * render * * Allow the view helper to be callable. * * @param ElementInterface $element The element which contains the error messages. * @param array $options Optional view helper options. * * @return string|$this */ public function render(ElementInterface $element, array $options) { if (!empty($options)) { $this->setOptions($options); } $html = ''; foreach ($element->getMessages() as $type => $message) { $html .= $this->renderMessage($message, $type); } return $html; }
/** * Helper method. Checks whether $element has error. * * @param ElementInterface $element * @param FormInterface $form * @return bool */ protected function isElementHasError(ElementInterface $element, FormInterface $form) { if ($element->getMessages()) { return true; } $elementName = $this->normalizeElementName($element->getName()); $elements = $this->getInvalidFieldsetElements($element, $form); if (isset($elements[$elementName]) && $elements[$elementName] === $element) { return true; } return false; }
/** * 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; }
/** * * @see FormRow::render() * @param ElementInterface $oElement * @return string */ public function render(ElementInterface $oElement, $labelPosition = null) { $sElementType = $oElement->getAttribute('type'); // Nothing to do for hidden elements which have no messages if ($sElementType === 'hidden' && !$oElement->getMessages()) { return parent::render($oElement); } // Retrieve expected layout $sLayout = $oElement->getOption('layout'); // Partial rendering if ($this->partial) { return $this->view->render($this->partial, array('element' => $oElement, 'label' => $this->renderLabel($oElement), 'labelAttributes' => $this->labelAttributes, 'labelPosition' => $this->labelPosition, 'renderErrors' => $this->renderErrors)); } $sRowClass = ''; if (($fgs = $oElement->getOption('form-group-size')) != false) { $sRowClass = $fgs; } // Validation state if (($sValidationState = $oElement->getOption('validation-state')) != false) { $sRowClass .= ' has-' . $sValidationState; } // "has-error" validation state case if ($oElement->getMessages()) { $sRowClass .= ' has-error'; // Element have errors if (($sInputErrorClass = $this->getInputErrorClass()) != false) { if (($sElementClass = $oElement->getAttribute('class')) != false) { if (!preg_match('/(\\s|^)' . preg_quote($sInputErrorClass, '/') . '(\\s|$)/', $sElementClass)) { $oElement->setAttribute('class', trim($sElementClass . ' ' . $sInputErrorClass)); } } else { $oElement->setAttribute('class', $sInputErrorClass); } } } // Column size if (($sColumSize = $oElement->getOption('column-size')) && $sLayout !== LeadFilterForm::LAYOUT_HORIZONTAL) { $sRowClass .= ' col-' . $sColumSize; } // Render element $sElementContent = $this->renderElement($oElement); // Render form row if ($sElementType === 'checkbox' && $sLayout !== LeadFilterForm::LAYOUT_HORIZONTAL) { return $sElementContent . PHP_EOL; } if (($sElementType === 'submit' || $sElementType === 'button' || $sElementType === 'reset') && $sLayout === LeadFilterForm::LAYOUT_INLINE) { return $sElementContent . PHP_EOL; } return sprintf(self::$formGroupFormat, $sRowClass, $sElementContent) . PHP_EOL; }
/** * @param ElementInterface $element * @param boolean $block * * @return null|string */ public function __invoke(ElementInterface $element, $block = false) { $messages = $element->getMessages(); if (empty($messages)) { return null; } $errors = array(); foreach ($messages as $message) { $error = new HtmlElement('span'); $error->addClass($block ? 'help-block' : 'help-inline'); $error->setContent($this->translate((string) $message)); $errors[] = $error; } return implode(PHP_EOL, $errors); }
public function render(ElementInterface $element) { $inputErrorClass = ''; // Does this element have errors ? if (count($element->getMessages()) > 0) { $inputErrorClass = ' has-error'; } $type = $element->getAttribute('type'); if ($type != 'checkbox') { return '<div class="form-group' . $inputErrorClass . '">' . parent::render($element) . '</div>'; } $prefix = '<div class="form-group' . $inputErrorClass . '"><div class="col-sm-offset-2 col-sm-5"><div class="checkbox">'; $postfix = '</div></div></div>'; return $prefix . parent::render($element) . $postfix; }
public function render(ElementInterface $element, $labelPosition = null) { if ($element->getMessages()) { $html = '<div class="form-group has-error">'; } else { $html = '<div class="form-group">'; } if ($element->getLabel()) { $html .= $this->view->formLabel($element); $element->setAttribute('class', 'form-control'); } if ($element instanceof Submit) { $element->setAttribute('class', 'btn btn-primary'); } $html .= $this->view->formElement($element); if ($element->getMessages()) { $html .= '<div class="help-block">'; // $html .= $this->view->formElementErrors($element); $html .= implode('<br>', $element->getMessages()); $html .= '</div>'; } $html .= '</div>'; return $html; }
/** * 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; }
/** * 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; }
/** * @param ElementInterface $oElement * @return string */ public function getRowClassFromElement(\Zend\Form\ElementInterface $oElement) { $sRowClass = ''; if ($sFormGroupSize = $oElement->getOption('bootstrap-form-group-size')) { $sRowClass = $sFormGroupSize; } // Validation state if ($sValidationState = $oElement->getOption('validation-state')) { $sRowClass .= ' has-' . $sValidationState; } if ($oElement->getMessages()) { $sRowClass .= ' has-error'; } // Column size if (($sColumSize = $oElement->getOption('column-size')) && $oElement->getOption('bootstrap-layout') !== Form::LAYOUT_HORIZONTAL) { $sRowClass .= ' col-' . $sColumSize; } return $sRowClass; }
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; }
/** * Render errors. * * @param ElementInterface $element * * @return null|\SxBootstrap\View\Helper\Bootstrap\Form\Errors */ protected function renderError(ElementInterface $element) { $messages = $element->getMessages(); if (empty($messages)) { return null; } $errorPlugin = $this->getView()->plugin('sxb_form_errors'); return $errorPlugin($element); }
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>"; }