/** * @param \Magento\Catalog\Model\ProductOptions\ConfigInterface $productOptionConfig * @param \Magento\Catalog\Model\Config\Source\Product\Options\Price $priceConfig */ public function __construct(\Magento\Catalog\Model\ProductOptions\ConfigInterface $productOptionConfig, \Magento\Catalog\Model\Config\Source\Product\Options\Price $priceConfig) { foreach ($productOptionConfig->getAll() as $option) { foreach ($option['types'] as $type) { $this->productOptionTypes[] = $type['name']; } } foreach ($priceConfig->toOptionArray() as $item) { $this->priceTypes[] = $item['value']; } }
/** * Retrieve price types * * @return array */ protected function getPriceTypes() { $priceTypes = $this->productOptionsPrice->toOptionArray(); $productType = $this->locator->getProduct()->getTypeId(); $exceptions = $this->getNotSupportedPriceTypes(); if (isset($exceptions[$productType])) { $i = 0; while ($i < count($priceTypes)) { if (in_array($priceTypes[$i]['value'], $exceptions[$productType])) { unset($priceTypes[$i]); continue; } $i += 1; } } return $priceTypes; }
/** * @return $this */ protected function _prepareLayout() { $this->setChild('option_price_type', $this->getLayout()->addBlock('Magento\\Framework\\View\\Element\\Html\\Select', $this->getNameInLayout() . '.option_price_type', $this->getNameInLayout())->setData(['id' => 'product_option_<%- data.option_id %>_price_type', 'class' => 'select product-option-price-type'])); $this->getChildBlock('option_price_type')->setName('product[options][<%- data.option_id %>][price_type]')->setOptions($this->_optionPrice->toOptionArray()); return parent::_prepareLayout(); }
/** * Get config for "Price Type" field * * @param int $sortOrder * @param array $config * @return array */ protected function getPriceTypeFieldConfig($sortOrder, array $config = []) { return array_replace_recursive(['arguments' => ['data' => ['config' => ['label' => __('Price Type'), 'componentType' => Field::NAME, 'formElement' => Select::NAME, 'dataScope' => static::FIELD_PRICE_TYPE_NAME, 'dataType' => Text::NAME, 'sortOrder' => $sortOrder, 'options' => $this->productOptionsPrice->toOptionArray()]]]], $config); }