Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions | Protected Attributes | Static Protected Attributes
Region Class Reference
Inheritance diagram for Region:
RendererInterface

Public Member Functions

 __construct (\Magento\Directory\Model\CountryFactory $countryFactory, \Magento\Directory\Helper\Data $directoryHelper, \Magento\Framework\Escaper $escaper)
 
 render (AbstractElement $element)
 
- Public Member Functions inherited from RendererInterface
 render (\Magento\Framework\Data\Form\Element\AbstractElement $element)
 

Protected Attributes

 $_escaper = null
 
 $_countryFactory
 

Static Protected Attributes

static $_regionCollections
 

Detailed Description

Region field renderer

Author
Magento Core Team core@.nosp@m.mage.nosp@m.ntoco.nosp@m.mmer.nosp@m.ce.co.nosp@m.m

Definition at line 15 of file Region.php.

Constructor & Destructor Documentation

◆ __construct()

__construct ( \Magento\Directory\Model\CountryFactory  $countryFactory,
\Magento\Directory\Helper\Data  $directoryHelper,
\Magento\Framework\Escaper  $escaper 
)
Parameters
\Magento\Directory\Model\CountryFactory$countryFactory
\Magento\Directory\Helper\Data$directoryHelper
\Magento\Framework\Escaper$escaper

Definition at line 46 of file Region.php.

50  {
51  $this->_countryFactory = $countryFactory;
52  $this->_directoryHelper = $directoryHelper;
53  $this->_escaper = $escaper;
54  }

Member Function Documentation

◆ render()

render ( AbstractElement  $element)
Parameters
AbstractElement$element
Returns
string @SuppressWarnings(PHPMD.CyclomaticComplexity) @SuppressWarnings(PHPMD.NPathComplexity)

Definition at line 62 of file Region.php.

63  {
64  $countryId = false;
65  $isRegionRequired = false;
66  if ($country = $element->getForm()->getElement('country_id')) {
67  $countryId = $country->getValue();
68  $isRegionRequired = $this->_directoryHelper->isRegionRequired($countryId);
69  }
70 
71  $html = '<div class="field field-region ' . ($isRegionRequired ? 'required' : '') . '">' . "\n";
72 
73  $regionCollection = false;
74  if ($countryId) {
75  if (!isset(self::$_regionCollections[$countryId])) {
76  self::$_regionCollections[$countryId] = $this->_countryFactory->create()->setId(
77  $countryId
78  )->getLoadedRegionCollection()->toOptionArray();
79  }
80  $regionCollection = self::$_regionCollections[$countryId];
81  }
82 
83  $regionId = intval($element->getForm()->getElement('region_id')->getValue());
84 
85  $htmlAttributes = $element->getHtmlAttributes();
86  foreach ($htmlAttributes as $key => $attribute) {
87  if ('type' === $attribute) {
88  unset($htmlAttributes[$key]);
89  break;
90  }
91  }
92 
93  // Output two elements - for 'region' and for 'region_id'.
94  // Two elements are needed later upon form post - to properly set data to address model,
95  // otherwise old value can be left in region_id attribute and saved to DB.
96  // Depending on country selected either 'region' (input text) or 'region_id' (selectbox) is visible to user
97  $regionHtmlName = $element->getName();
98  $regionIdHtmlName = str_replace('region', 'region_id', $regionHtmlName);
99  $regionHtmlId = $element->getHtmlId();
100  $regionIdHtmlId = str_replace('region', 'region_id', $regionHtmlId);
101 
102  if ($isRegionRequired) {
103  $element->addClass('required-entry');
104  }
105 
106  if ($regionCollection && count($regionCollection) > 0) {
107  $elementClass = $element->getClass();
108  $html .= '<label class="label" for="' .
109  $regionIdHtmlId .
110  '"><span>' .
111  $element->getLabel() .
112  '</span>' .
113  '</label>';
114  $html .= '<div class="control">';
115 
116  $html .= '<select id="' . $regionIdHtmlId . '" name="' . $regionIdHtmlName . '" ' . $element->serialize(
117  $htmlAttributes
118  ) . '>' . "\n";
119  foreach ($regionCollection as $region) {
120  $selected = $regionId == $region['value'] ? ' selected="selected"' : '';
121  $regionVal = 0 == $region['value'] ? '' : (int)$region['value'];
122  $html .= '<option value="' . $regionVal . '"' . $selected . '>' . $this->_escaper->escapeHtml(
123  __($region['label'])
124  ) . '</option>';
125  }
126  $html .= '</select>' . "\n";
127 
128  $html .= '<input type="hidden" name="' . $regionHtmlName . '" id="' . $regionHtmlId . '" value=""/>';
129 
130  $html .= '</div>';
131  $element->setClass($elementClass);
132  } else {
133  $html .= '<label class="label" for="' .
134  $regionHtmlId .
135  '"><span>' .
136  $element->getLabel() .
137  '</span></label>';
138  $html .= '<div class="control">';
139  $html .= '<input id="' .
140  $regionHtmlId .
141  '" name="' .
142  $regionHtmlName .
143  '" value="' .
144  $element->getEscapedValue() .
145  '" ' .
146  $element->serialize(
147  $htmlAttributes
148  ) . "/>" . "\n";
149  $html .= '<input type="hidden" name="' . $regionIdHtmlName . '" id="' . $regionIdHtmlId . '" value=""/>';
150  $html .= '</div>' . "\n";
151  }
152  $html .= '</div>' . "\n";
153  return $html;
154  }
__()
Definition: __.php:13
$element
Definition: element.phtml:12

Field Documentation

◆ $_countryFactory

$_countryFactory
protected

Definition at line 39 of file Region.php.

◆ $_escaper

$_escaper = null
protected

Definition at line 34 of file Region.php.

◆ $_regionCollections

$_regionCollections
staticprotected

Definition at line 27 of file Region.php.


The documentation for this class was generated from the following file: