/** * Retrieve Option values array by ids * * @param string|array $ids * @param bool $withEmpty Add empty option to array * @return array */ public function getSpecificOptions($ids, $withEmpty = true) { $options = $this->_attrOptionCollectionFactory->create()->setPositionOrder('asc')->setAttributeFilter($this->getAttribute()->getId())->addFieldToFilter('main_table.option_id', ['in' => $ids])->setStoreFilter($this->getAttribute()->getStoreId())->load()->toOptionArray(); if ($withEmpty) { array_unshift($options, ['label' => '', 'value' => '']); } return $options; }
/** * Retrieve attribute option values for given store id * * @param int $storeId * @return array */ public function getStoreOptionValues($storeId) { $values = $this->getData('store_option_values_' . $storeId); if ($values === null) { $values = []; $valuesCollection = $this->_attrOptionCollectionFactory->create()->setAttributeFilter($this->getAttributeObject()->getId())->setStoreFilter($storeId, false)->load(); foreach ($valuesCollection as $item) { $values[$item->getId()] = $item->getValue(); } $this->setData('store_option_values_' . $storeId, $values); } return $values; }
/** * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute * @param array $data * @return array */ protected function getOption($attribute, $data) { $result = []; $data['option'] = explode("\n", $data['option']); /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection $options */ $options = $this->attrOptionCollectionFactory->create()->setAttributeFilter($attribute->getId())->setPositionOrder('asc', true)->load(); foreach ($data['option'] as $value) { if (!$options->getItemByColumnValue('value', $value)) { $result[] = $value; } } return $result ? $this->convertOption($result) : $result; }
/** * Loads all attributes with options for attribute * * @param string $attributeCode * @return $this */ protected function loadAttributeOptions($attributeCode) { /** @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection $collection */ $collection = $this->attributeCollectionFactory->create(); $collection->addFieldToSelect(['attribute_code', 'attribute_id']); $collection->addFieldToFilter('attribute_code', $attributeCode); $collection->setFrontendInputTypeFilter(['in' => ['select', 'multiselect']]); foreach ($collection as $item) { $options = $this->attrOptionCollectionFactory->create()->setAttributeFilter($item->getAttributeId())->setPositionOrder('asc', true)->load(); $this->attributeCodeOptionsPair[$item->getAttributeCode()] = $options; } return $this; }
/** * @dataProvider getOptionTextProvider * @param array $optionsIds * @param array|string $value * @param array $options * @param array|string $expectedResult */ public function testGetOptionText($optionsIds, $value, $options, $expectedResult) { $attributeId = 1; $storeId = 5; $attribute = $this->getMock('Magento\\Eav\\Model\\Entity\\Attribute\\AbstractAttribute', ['getId', 'getStoreId', '__wakeup'], [], '', false); $attribute->expects($this->once())->method('getId')->willReturn($attributeId); $attribute->expects($this->once())->method('getStoreId')->willReturn($storeId); $this->model->setAttribute($attribute); $this->collectionFactory->expects($this->once())->method('create')->willReturnSelf(); $this->collectionFactory->expects($this->once())->method('setPositionOrder')->willReturnSelf(); $this->collectionFactory->expects($this->once())->method('setAttributeFilter')->with($attributeId)->willReturnSelf(); $this->collectionFactory->expects($this->once())->method('addFieldToFilter')->with('main_table.option_id', ['in' => $optionsIds])->willReturnSelf(); $this->collectionFactory->expects($this->once())->method('setStoreFilter')->with($storeId)->willReturnSelf(); $this->collectionFactory->expects($this->once())->method('load')->willReturnSelf(); $this->collectionFactory->expects($this->once())->method('toOptionArray')->willReturn($options); $this->assertEquals($expectedResult, $this->model->getOptionText($value)); }
/** * @param $attributeId * @return void */ private function loadOptionCollection($attributeId) { if (empty($this->optionCollection[$attributeId])) { $this->optionCollection[$attributeId] = $this->attrOptionCollectionFactory->create()->setAttributeFilter($attributeId)->setPositionOrder('asc', true)->load(); } }