/** * 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; }
/** * @covers \Magento\Framework\Data\Form\Element\AbstractElement::getHtml() */ public function testGetHtmlWithRenderer() { $this->_model->setRequired(true); $expectedHtml = 'some-html'; $rendererMock = $this->getMockForAbstractClass('Magento\\Framework\\Data\\Form\\Element\\Renderer\\RendererInterface'); $rendererMock->expects($this->once())->method('render')->with($this->_model)->will($this->returnValue($expectedHtml)); $this->_model->setRenderer($rendererMock); $this->assertEquals($expectedHtml, $this->_model->getHtml()); $this->assertEquals(' required-entry', $this->_model->getClass()); }
/** * Add additional data to form element * * @param AbstractElement $element * @return $this */ protected function _addAdditionalFormElementData(AbstractElement $element) { switch ($element->getId()) { case 'email': $element->setRequired(0); $element->setClass('validate-email'); break; } return $this; }