/** * Output the region element and javasctipt that makes it dependent from country element * * @param \Magento\Framework\Data\Form\Element\AbstractElement $element * @return string * * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element) { if ($country = $element->getForm()->getElement('country_id')) { $countryId = $country->getValue(); } else { return $element->getDefaultHtml(); } $regionId = $element->getForm()->getElement('region_id')->getValue(); $html = '<div class="field field-state required">'; $element->setClass('input-text'); $element->setRequired(true); $html .= $element->getLabelHtml() . '<div class="control">'; $html .= $element->getElementHtml(); $selectName = str_replace('region', 'region_id', $element->getName()); $selectId = $element->getHtmlId() . '_id'; $html .= '<select id="' . $selectId . '" name="' . $selectName . '" class="select required-entry" style="display:none">'; $html .= '<option value="">' . __('Please select') . '</option>'; $html .= '</select>'; $html .= '<script>' . "\n"; $html .= 'require(["prototype", "mage/adminhtml/form"], function(){'; $html .= '$("' . $selectId . '").setAttribute("defaultValue", "' . $regionId . '");' . "\n"; $html .= 'new regionUpdater("' . $country->getHtmlId() . '", "' . $element->getHtmlId() . '", "' . $selectId . '", ' . $this->_directoryHelper->getRegionJson() . ');' . "\n"; $html .= '});'; $html .= '</script>' . "\n"; $html .= '</div></div>' . "\n"; return $html; }
/** * @param AbstractElement $element * @return string * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function render(AbstractElement $element) { $countryId = false; $isRegionRequired = false; if ($country = $element->getForm()->getElement('country_id')) { $countryId = $country->getValue(); $isRegionRequired = $this->_directoryHelper->isRegionRequired($countryId); } $html = '<div class="field field-region ' . ($isRegionRequired ? 'required' : '') . '">' . "\n"; $regionCollection = false; if ($countryId) { if (!isset(self::$_regionCollections[$countryId])) { self::$_regionCollections[$countryId] = $this->_countryFactory->create()->setId($countryId)->getLoadedRegionCollection()->toOptionArray(); } $regionCollection = self::$_regionCollections[$countryId]; } $regionId = intval($element->getForm()->getElement('region_id')->getValue()); $htmlAttributes = $element->getHtmlAttributes(); foreach ($htmlAttributes as $key => $attribute) { if ('type' === $attribute) { unset($htmlAttributes[$key]); break; } } // Output two elements - for 'region' and for 'region_id'. // Two elements are needed later upon form post - to properly set data to address model, // otherwise old value can be left in region_id attribute and saved to DB. // Depending on country selected either 'region' (input text) or 'region_id' (selectbox) is visible to user $regionHtmlName = $element->getName(); $regionIdHtmlName = str_replace('region', 'region_id', $regionHtmlName); $regionHtmlId = $element->getHtmlId(); $regionIdHtmlId = str_replace('region', 'region_id', $regionHtmlId); if ($isRegionRequired) { $element->addClass('required-entry'); } if ($regionCollection && count($regionCollection) > 0) { $elementClass = $element->getClass(); $html .= '<label class="label" for="' . $regionIdHtmlId . '"><span>' . $element->getLabel() . '</span>' . '</label>'; $html .= '<div class="control">'; $html .= '<select id="' . $regionIdHtmlId . '" name="' . $regionIdHtmlName . '" ' . $element->serialize($htmlAttributes) . '>' . "\n"; foreach ($regionCollection as $region) { $selected = $regionId == $region['value'] ? ' selected="selected"' : ''; $regionVal = 0 == $region['value'] ? '' : (int) $region['value']; $html .= '<option value="' . $regionVal . '"' . $selected . '>' . $this->_escaper->escapeHtml(__($region['label'])) . '</option>'; } $html .= '</select>' . "\n"; $html .= '<input type="hidden" name="' . $regionHtmlName . '" id="' . $regionHtmlId . '" value=""/>'; $html .= '</div>'; $element->setClass($elementClass); } else { $html .= '<label class="label" for="' . $regionHtmlId . '"><span>' . $element->getLabel() . '</span></label>'; $html .= '<div class="control">'; $html .= '<input id="' . $regionHtmlId . '" name="' . $regionHtmlName . '" value="' . $element->getEscapedValue() . '" ' . $element->serialize($htmlAttributes) . "/>" . "\n"; $html .= '<input type="hidden" name="' . $regionIdHtmlName . '" id="' . $regionIdHtmlId . '" value=""/>'; $html .= '</div>' . "\n"; } $html .= '</div>' . "\n"; return $html; }
/** * Checkbox render function * * @param \Magento\Framework\Data\Form\Element\AbstractElement $element * @return string */ public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element) { /** @var \Magento\Framework\Data\Form\Element\Checkbox $checkbox */ $checkbox = $this->_elementFactory->create('checkbox', array('data' => $element->getData())); $checkbox->setForm($element->getForm()); $elementHtml = sprintf('<div class="field no-label field-%s with-note">' . '<div class="control">' . '<div class="nested">' . '<div class="field choice"> %s' . '<label class="label" for="%s">%s</label>' . '<p class="note">%s</p>' . '</div>' . '</div>' . '</div>' . '</div>', $element->getHtmlId(), $checkbox->getElementHtml(), $element->getHtmlId(), $element->getLabel(), $element->getNote()); return $elementHtml; }
/** * Prepare wysiwyg element HTML * * @param AbstractElement $element Form Element * @return AbstractElement */ public function prepareElementHtml(AbstractElement $element) { /* @var $fieldset \Magento\Framework\Data\Form\Element\Fieldset */ $fieldset = $element->getForm()->getElement($this->getFieldsetId()); $widgetValues = $this->getLayout()->getBlock('easytabs.tab.options')->getWidgetValues(); $fieldset->addField('widget_content', 'editor', ['name' => 'parameters[widget_content]', 'label' => __('Content'), 'title' => __('Content'), 'style' => 'height:36em', 'required' => true, 'config' => $this->wysiwygConfig->getConfig(), 'value' => $widgetValues['widget_content']]); return $element; }
/** * Collapsed or expanded fieldset when page loaded? * * @param AbstractElement $element * @return bool */ protected function _isCollapseState($element) { if ($element->getExpanded() || $element->getForm() && $element->getForm()->getElements()->count() === 1) { return true; } $extra = $this->_authSession->getUser()->getExtra(); if (isset($extra['configState'][$element->getId()])) { return $extra['configState'][$element->getId()]; } return $this->isCollapsedDefault; }