Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Select.php
Go to the documentation of this file.
1 <?php
7 
12 {
18  protected $_options = [];
19 
25  public function getOptions()
26  {
27  return $this->_options;
28  }
29 
36  public function setOptions($options)
37  {
38  $this->_options = $options;
39  return $this;
40  }
41 
50  public function addOption($value, $label, $params = [])
51  {
52  $this->_options[] = ['value' => $value, 'label' => $label, 'params' => $params];
53  return $this;
54  }
55 
62  public function setId($elementId)
63  {
64  $this->setData('id', $elementId);
65  return $this;
66  }
67 
74  public function setClass($class)
75  {
76  $this->setData('class', $class);
77  return $this;
78  }
79 
86  public function setTitle($title)
87  {
88  $this->setData('title', $title);
89  return $this;
90  }
91 
97  public function getId()
98  {
99  return $this->getData('id');
100  }
101 
107  public function getClass()
108  {
109  return $this->getData('class');
110  }
111 
117  public function getTitle()
118  {
119  return $this->getData('title');
120  }
121 
130  protected function _toHtml()
131  {
132  if (!$this->_beforeToHtml()) {
133  return '';
134  }
135 
136  $html = '<select name="' .
137  $this->getName() .
138  '" id="' .
139  $this->getId() .
140  '" class="' .
141  $this->getClass() .
142  '" title="' .
143  $this->escapeHtml($this->getTitle()) .
144  '" ' .
145  $this->getExtraParams() .
146  '>';
147 
148  $values = $this->getValue();
149  if (!is_array($values)) {
150  $values = (array)$values;
151  }
152 
153  $isArrayOption = true;
154  foreach ($this->getOptions() as $key => $option) {
155  $optgroupName = '';
156  if ($isArrayOption && is_array($option)) {
157  $value = $option['value'];
158  $label = (string)$option['label'];
159  $optgroupName = isset($option['optgroup-name']) ? $option['optgroup-name'] : $label;
160  $params = !empty($option['params']) ? $option['params'] : [];
161  } else {
162  $value = (string)$key;
163  $label = (string)$option;
164  $isArrayOption = false;
165  $params = [];
166  }
167 
168  if (is_array($value)) {
169  $html .= '<optgroup label="' . $this->escapeHtml($label)
170  . '" data-optgroup-name="' . $this->escapeHtml($optgroupName) . '">';
171  foreach ($value as $keyGroup => $optionGroup) {
172  if (!is_array($optionGroup)) {
173  $optionGroup = ['value' => $keyGroup, 'label' => $optionGroup];
174  }
175  $html .= $this->_optionToHtml($optionGroup, in_array($optionGroup['value'], $values));
176  }
177  $html .= '</optgroup>';
178  } else {
179  $html .= $this->_optionToHtml(
180  ['value' => $value, 'label' => $label, 'params' => $params],
181  in_array($value, $values)
182  );
183  }
184  }
185  $html .= '</select>';
186  return $html;
187  }
188 
196  protected function _optionToHtml($option, $selected = false)
197  {
198  $selectedHtml = $selected ? ' selected="selected"' : '';
199  if ($this->getIsRenderToJsTemplate() === true) {
200  $selectedHtml .= ' <%= option_extra_attrs.option_' . self::calcOptionHash($option['value']) . ' %>';
201  }
202 
203  $params = '';
204  if (!empty($option['params']) && is_array($option['params'])) {
205  foreach ($option['params'] as $key => $value) {
206  if (is_array($value)) {
207  foreach ($value as $keyMulti => $valueMulti) {
208  $params .= sprintf(' %s="%s" ', $keyMulti, $this->escapeHtml($valueMulti));
209  }
210  } else {
211  $params .= sprintf(' %s="%s" ', $key, $this->escapeHtml($value));
212  }
213  }
214  }
215 
216  return sprintf(
217  '<option value="%s"%s %s>%s</option>',
218  $this->escapeHtml($option['value']),
219  $selectedHtml,
220  $params,
221  $this->escapeHtml($option['label'])
222  );
223  }
224 
230  public function getHtml()
231  {
232  return $this->toHtml();
233  }
234 
241  public function calcOptionHash($optionValue)
242  {
243  return sprintf('%u', crc32($this->getName() . $this->getId() . $optionValue));
244  }
245 }
$title
Definition: default.phtml:14
getData($key='', $index=null)
Definition: DataObject.php:119
_optionToHtml($option, $selected=false)
Definition: Select.php:196
$values
Definition: options.phtml:88
addOption($value, $label, $params=[])
Definition: Select.php:50
$label
Definition: details.phtml:21
$_option $_optionId $class
Definition: date.phtml:13
$value
Definition: gender.phtml:16
setData($key, $value=null)
Definition: DataObject.php:72
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18