Skip to content

Commit f6fe81e

Browse files
author
roman
committed
MAGETWO-90516: Wrong custom option behavior
1 parent 3b3edd9 commit f6fe81e

File tree

4 files changed

+67
-57
lines changed

4 files changed

+67
-57
lines changed

app/code/Magento/Catalog/Block/Product/View/Options/Type/Select.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
namespace Magento\Catalog\Block\Product\View\Options\Type;
88

99
use Magento\Catalog\Api\Data\ProductCustomOptionInterface;
10-
use Magento\Catalog\Block\Product\View\Options\Select\CheckableFactory;
11-
use Magento\Catalog\Block\Product\View\Options\Select\MultipleFactory;
10+
use Magento\Catalog\Block\Product\View\Options\Type\Select\CheckableFactory;
11+
use Magento\Catalog\Block\Product\View\Options\Type\Select\MultipleFactory;
1212
use Magento\Framework\App\ObjectManager;
1313
use Magento\Framework\View\Element\Template\Context;
1414
use Magento\Framework\Pricing\Helper\Data;

app/code/Magento/Catalog/Block/Product/View/Options/Select/Checkable.php renamed to app/code/Magento/Catalog/Block/Product/View/Options/Type/Select/Checkable.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,10 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
namespace Magento\Catalog\Block\Product\View\Options\Select;
7+
namespace Magento\Catalog\Block\Product\View\Options\Type\Select;
88

99
use Magento\Catalog\Api\Data\ProductCustomOptionValuesInterface;
1010
use Magento\Catalog\Block\Product\View\Options\AbstractOptions;
11-
use Magento\Framework\View\Element\Template\Context;
12-
use Magento\Framework\Pricing\Helper\Data;
13-
use Magento\Catalog\Helper\Data as CatalogHelper;
1411

1512
/**
1613
* Represent necessary logic for checkbox and radio button option type

app/code/Magento/Catalog/Block/Product/View/Options/Select/Multiple.php renamed to app/code/Magento/Catalog/Block/Product/View/Options/Type/Select/Multiple.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
namespace Magento\Catalog\Block\Product\View\Options\Select;
7+
namespace Magento\Catalog\Block\Product\View\Options\Type\Select;
88

99
use Magento\Catalog\Block\Product\View\Options\AbstractOptions;
1010
use Magento\Catalog\Api\Data\ProductCustomOptionInterface;

app/code/Magento/Catalog/view/base/templates/product/composite/fieldset/options/view/checkable.phtml

Lines changed: 63 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,84 +4,97 @@
44
* See COPYING.txt for license details.
55
*/
66

7-
use Magento\Catalog\Api\Data\ProductCustomOptionInterface;
7+
// @codingStandardsIgnoreFile
8+
use Magento\Catalog\Model\Product\Option;
89

910
/**
10-
* @var \Magento\Catalog\Block\Product\View\Options\Select\Checkable $block
11+
* @var \Magento\Catalog\Block\Product\View\Options\Type\Select\Checkable $block
1112
*/
1213
$option = $block->getOption();
13-
1414
if ($option) : ?>
15-
<?php
16-
$configValue = $block->getPreconfiguredValue($option);
17-
$optionType = $option->getType();
18-
$arraySign = $optionType === ProductCustomOptionInterface::OPTION_TYPE_CHECKBOX ? '[]' : '';
19-
$count = 1;
20-
?>
15+
<?php
16+
$configValue = $block->getPreconfiguredValue($option);
17+
$optionType = $option->getType();
18+
$arraySign = $optionType === Option::OPTION_TYPE_CHECKBOX ? '[]' : '';
19+
$count = 1;
20+
?>
2121

22-
<div class="options-list nested" id="options-<?= /* @noEscape */ $option->getId() ?>-list">
23-
24-
<?php if ($optionType === ProductCustomOptionInterface::OPTION_TYPE_RADIO) : ?>
25-
<div class="field choice admin__field admin__field-option">
26-
<input type="radio"
27-
id="options_<?= /* @noEscape */ $option->getId() ?>"
28-
class="radio admin__control-radio product-custom-option"
29-
name="options[<?= /* @noEscape */ $option->getId() ?>]"
30-
data-selector="options[<?= /* @noEscape */ $option->getId() ?>]"
31-
onclick="<?= $block->getSkipJsReloadPrice() ? '' : 'opConfig.reloadPrice()' ?>"
32-
value=""
33-
checked="checked"
34-
/>
35-
<label class="label admin__field-label" for="options_<?= /* @noEscape */ $option->getId() ?>">
36-
<span>
37-
<?= /* @noEscape */ __('None') ?>
38-
</span>
39-
</label>
40-
</div>
41-
<?php endif; ?>
22+
<div class="options-list nested" id="options-<?php echo /* @noEscape */
23+
$option->getId() ?>-list">
24+
<?php if ($optionType === Option::OPTION_TYPE_RADIO && !$option->getIsRequire()): ?>
25+
<div class="field choice admin__field admin__field-option">
26+
<input type="radio"
27+
id="options_<?php echo /* @noEscape */
28+
$option->getId() ?>"
29+
class="radio admin__control-radio product-custom-option"
30+
name="options[<?php echo /* @noEscape */
31+
$option->getId() ?>]"
32+
data-selector="options[<?php echo /* @noEscape */
33+
$option->getId() ?>]"
34+
onclick="<?php echo $block->getSkipJsReloadPrice() ? '' : 'opConfig.reloadPrice()' ?>"
35+
value=""
36+
checked="checked"
37+
/>
38+
<label class="label admin__field-label" for="options_<?php echo /* @noEscape */
39+
$option->getId() ?>">
40+
<span>
41+
<?php echo /* @noEscape */
42+
__('None') ?>
43+
</span>
44+
</label>
45+
</div>
46+
<?php endif; ?>
4247

4348
<?php foreach ($option->getValues() as $value) : ?>
4449
<?php
4550
$checked = '';
4651
$count++;
47-
4852
if ($arraySign) {
4953
$checked = is_array($configValue) && in_array($value->getOptionTypeId(), $configValue) ? 'checked' : '';
5054
} else {
5155
$checked = $configValue == $value->getOptionTypeId() ? 'checked' : '';
5256
}
53-
5457
$dataSelector = 'options[' . $option->getId() . ']';
5558
if ($arraySign) {
5659
$dataSelector .= '[' . $value->getOptionTypeId() . ']';
5760
}
5861
?>
5962

60-
<div class="field choice admin__field admin__field-option'<?= /* @noEscape */ $option->getIsRequire() ?>'">
61-
<input type="<?= /* @noEscape */ $optionType ?>"
62-
class="<?= /* @noEscape */
63-
/** @noinspection DisconnectedForeachInstructionInspection */
64-
$optionType === ProductCustomOptionInterface::OPTION_TYPE_RADIO ?
63+
<div class="field choice admin__field admin__field-option <?php echo /* @noEscape */
64+
$option->getIsRequire() ? 'required': '' ?>">
65+
<input type="<?php echo /* @noEscape */
66+
$optionType ?>"
67+
class="<?php /** @noinspection DisconnectedForeachInstructionInspection */
68+
echo /* @noEscape */
69+
$optionType === Option::OPTION_TYPE_RADIO ?
6570
'radio admin__control-radio' :
66-
'checkbox admin__control-checkbox' ?> <?= /* @noEscape */ $option->getIsRequire() ?>
71+
'checkbox admin__control-checkbox' ?> <?php echo /* @noEscape */
72+
$option->getIsRequire() ? 'required': '' ?>
6773
product-custom-option
68-
<?= $block->getSkipJsReloadPrice() ? '' : 'opConfig.reloadPrice()' ?>"
69-
name="options[<?= $option->getId() ?>]<?= /* @noEscape */ $arraySign ?>"
70-
id="options_<?= /* @noEscape */ $option->getId() . '_' . $count ?>"
71-
value="<?= /* @noEscape */ $value->getOptionTypeId() ?>"
72-
<?= /* @noEscape */ $checked ?>
73-
data-selector="<?= /* @noEscape */ $dataSelector ?>"
74-
price="<?= /* @noEscape */ $block->getCurrencyByStore($value) ?>"
74+
<?php echo $block->getSkipJsReloadPrice() ? '' : 'opConfig.reloadPrice()' ?>"
75+
name="options[<?php echo $option->getId() ?>]<?php echo /* @noEscape */
76+
$arraySign ?>"
77+
id="options_<?php echo /* @noEscape */
78+
$option->getId() . '_' . $count ?>"
79+
value="<?php echo /* @noEscape */
80+
$value->getOptionTypeId() ?>"
81+
<?php echo /* @noEscape */
82+
$checked ?>
83+
data-selector="<?php echo /* @noEscape */
84+
$dataSelector ?>"
85+
price="<?php echo /* @noEscape */
86+
$block->getCurrencyByStore($value) ?>"
7587
/>
7688
<label class="label admin__field-label"
77-
for="options_<?= /* @noEscape */ $option->getId() . '_' . $count ?>">
89+
for="options_<?php echo /* @noEscape */
90+
$option->getId() . '_' . $count ?>">
7891
<span>
79-
<?= $block->escapeHtml($value->getTitle()) ?>
92+
<?php echo $block->escapeHtml($value->getTitle()) ?>
8093
</span>
81-
<?= /* @noEscape */ $block->formatPrice($value) ?>
94+
<?php echo /* @noEscape */
95+
$block->formatPrice($value) ?>
8296
</label>
8397
</div>
8498
<?php endforeach; ?>
85-
</div>
86-
<?php endif; ?>
87-
99+
</div>
100+
<?php endif; ?>

0 commit comments

Comments
 (0)