From 1042cb2f8f942761443dca4f78f551ab095a5d8a Mon Sep 17 00:00:00 2001 From: Navarr Barnier Date: Wed, 28 Sep 2016 10:23:16 -0400 Subject: [PATCH] Update the Product Option model and Block to utilize a hasValues() method rather than hardcoded check for SELECT group This is meant to be a non-breaking stop-gap measure to allow extensions and integrators to create custom customizable options without having to rewrite core Magento classes and without having to replace the Options block. --- .../Magento/Catalog/Block/Product/View/Options.php | 2 +- app/code/Magento/Catalog/Model/Product/Option.php | 11 +++++++++++ .../Catalog/Test/Unit/Model/Product/OptionTest.php | 9 +++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/Catalog/Block/Product/View/Options.php b/app/code/Magento/Catalog/Block/Product/View/Options.php index 349352513bec6..4c47c579cdd17 100644 --- a/app/code/Magento/Catalog/Block/Product/View/Options.php +++ b/app/code/Magento/Catalog/Block/Product/View/Options.php @@ -208,7 +208,7 @@ public function getJsonConfig() $config = []; foreach ($this->getOptions() as $option) { /* @var $option \Magento\Catalog\Model\Product\Option */ - if ($option->getGroupByType() == \Magento\Catalog\Model\Product\Option::OPTION_GROUP_SELECT) { + if ($option->hasValues()) { $tmpPriceValues = []; foreach ($option->getValues() as $valueId => $value) { $tmpPriceValues[$valueId] = $this->_getPriceConfiguration($value); diff --git a/app/code/Magento/Catalog/Model/Product/Option.php b/app/code/Magento/Catalog/Model/Product/Option.php index c17603460c75d..8c6304c6fac78 100644 --- a/app/code/Magento/Catalog/Model/Product/Option.php +++ b/app/code/Magento/Catalog/Model/Product/Option.php @@ -218,6 +218,17 @@ public function getValueById($valueId) return null; } + /** + * Whether or not the option type contains sub-values + * + * @param string $type + * @return bool + */ + public function hasValues($type = null) + { + return $this->getGroupByType($type) == self::OPTION_GROUP_SELECT; + } + /** * @return ProductCustomOptionValuesInterface[]|null */ diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/OptionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/OptionTest.php index 50ab88f7df462..6267caf89435b 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/OptionTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/OptionTest.php @@ -35,6 +35,15 @@ public function testGetProductSku() $this->assertEquals($productSku, $this->model->getProductSku()); } + public function testHasValues() + { + $this->model->setType('drop_down'); + $this->assertTrue($this->model->hasValues()); + + $this->model->setType('field'); + $this->assertFalse($this->model->hasValues()); + } + public function testGetRegularPrice() { $priceInfoMock = $this->getMockForAbstractClass(