/** * Retrive options ids from a labels array. * * @param Attribute $attribute Attribute. * @param string[] $labels Labels * * @return integer[] */ private function getOptionIds(Attribute $attribute, $labels) { $optionIds = []; if (!is_array($labels)) { $labels = [$labels]; } $options = $attribute->getSource()->getAllOptions(); foreach ($labels as $label) { foreach ($options as $option) { if ($option['label'] == $label) { $optionIds[] = (int) $option['value']; } } } return $optionIds; }
/** * Add data about search criteria to object state * * @param EntityAttribute $attribute * @param mixed $value * @return $this */ protected function _addSearchCriteria($attribute, $value) { $name = $attribute->getStoreLabel(); if (is_array($value)) { if (isset($value['from']) && isset($value['to'])) { if (!empty($value['from']) || !empty($value['to'])) { if (isset($value['currency'])) { /** @var $currencyModel Currency */ $currencyModel = $this->_currencyFactory->create()->load($value['currency']); $from = $currencyModel->format($value['from'], array(), false); $to = $currencyModel->format($value['to'], array(), false); } else { $currencyModel = null; } if (strlen($value['from']) > 0 && strlen($value['to']) > 0) { // - $value = sprintf('%s - %s', $currencyModel ? $from : $value['from'], $currencyModel ? $to : $value['to']); } elseif (strlen($value['from']) > 0) { // and more $value = __('%1 and greater', $currencyModel ? $from : $value['from']); } elseif (strlen($value['to']) > 0) { // to $value = __('up to %1', $currencyModel ? $to : $value['to']); } } else { return $this; } } } if (($attribute->getFrontendInput() == 'select' || $attribute->getFrontendInput() == 'multiselect') && is_array($value)) { foreach ($value as $key => $val) { $value[$key] = $attribute->getSource()->getOptionText($val); if (is_array($value[$key])) { $value[$key] = $value[$key]['label']; } } $value = implode(', ', $value); } elseif ($attribute->getFrontendInput() == 'select' || $attribute->getFrontendInput() == 'multiselect') { $value = $attribute->getSource()->getOptionText($value); if (is_array($value)) { $value = $value['label']; } } elseif ($attribute->getFrontendInput() == 'boolean') { $value = $value == 1 ? __('Yes') : __('No'); } $this->_searchCriterias[] = array('name' => $name, 'value' => $value); return $this; }
/** * Select field filter HTML with selected value. * * @param Attribute $attribute * @param mixed $value * @return \Magento\Framework\Phrase|string * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ protected function _getSelectHtmlWithValue(Attribute $attribute, $value) { if ($attribute->getFilterOptions()) { $options = []; foreach ($attribute->getFilterOptions() as $value => $label) { $options[] = ['value' => $value, 'label' => $label]; } } else { $options = $attribute->getSource()->getAllOptions(false); } if ($size = count($options)) { // add empty vaue option $firstOption = reset($options); if ('' === $firstOption['value']) { $options[key($options)]['label'] = ''; } else { array_unshift($options, ['value' => '', 'label' => '']); } $arguments = ['name' => $this->getFilterElementName($attribute->getAttributeCode()), 'id' => $this->getFilterElementId($attribute->getAttributeCode()), 'class' => 'admin__control-select select select-export-filter']; /** @var $selectBlock \Magento\Framework\View\Element\Html\Select */ $selectBlock = $this->_layout->createBlock('Magento\\Framework\\View\\Element\\Html\\Select', '', ['data' => $arguments]); return $selectBlock->setOptions($options)->setValue($value)->getHtml(); } else { return __('We can\'t filter an attribute with no attribute options.'); } }
/** * Apply configuration specific for different element type * * @param string $inputType * @param \Magento\Framework\Data\Form\Element\AbstractElement $element * @param \Magento\Eav\Model\Entity\Attribute $attribute * @return void */ protected function _applyTypeSpecificConfig($inputType, $element, \Magento\Eav\Model\Entity\Attribute $attribute) { switch ($inputType) { case 'select': $element->setValues($attribute->getSource()->getAllOptions(true, true)); break; case 'multiselect': $element->setValues($attribute->getSource()->getAllOptions(false, true)); $element->setCanBeEmpty(true); break; case 'date': $element->setDateFormat($this->_localeDate->getDateFormatWithLongYear()); break; case 'multiline': $element->setLineCount($attribute->getMultilineCount()); break; default: break; } }
/** * Select field filter HTML with selected value. * * @param Attribute $attribute * @param mixed $value * @return string */ protected function _getSelectHtmlWithValue(Attribute $attribute, $value) { if ($attribute->getFilterOptions()) { $options = array(); foreach ($attribute->getFilterOptions() as $value => $label) { $options[] = array('value' => $value, 'label' => $label); } } else { $options = $attribute->getSource()->getAllOptions(false); } if ($size = count($options)) { // add empty vaue option $firstOption = reset($options); if ('' === $firstOption['value']) { $options[key($options)]['label'] = ''; } else { array_unshift($options, array('value' => '', 'label' => '')); } $arguments = array('name' => $this->getFilterElementName($attribute->getAttributeCode()), 'id' => $this->getFilterElementId($attribute->getAttributeCode()), 'class' => 'select select-export-filter'); /** @var $selectBlock \Magento\Framework\View\Element\Html\Select */ $selectBlock = $this->_layout->getBlockFactory()->createBlock('Magento\\Framework\\View\\Element\\Html\\Select', array('data' => $arguments)); return $selectBlock->setOptions($options)->setValue($value)->getHtml(); } else { return __('Attribute does not has options, so filtering is impossible'); } }