I need to display options on the detailed page of a custom product, even if no simple product that is associated with the custom product is available. I suggest https://magecomp.com/blog/show-out-of-stock-for-configurable-products-magento-2 / this is Magento 2.2 How to show out of stock in configurable product a reference. Magento v 2.4.2.
It is very strange to me that the system does not even try to call the code below if all items are out of stock
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
?>
<?php
/** @var $block \Magento\ConfigurableProduct\Block\Product\View\Type\Configurable*/
$_product = $block->getProduct();
$_attributes = $block->decorateArray($block->getAllowAttributes());
?>
<?php if ($_product->isSaleable() && count($_attributes)) :?>
<?php foreach ($_attributes as $_attribute) : ?>
<div class="field configurable required">
<label class="label" for="attribute<?= $block->escapeHtmlAttr($_attribute->getAttributeId()) ?>">
<span><?= $block->escapeHtml($_attribute->getProductAttribute()->getStoreLabel()) ?></span>
</label>
<div class="control">
<select name="super_attribute[<?= $block->escapeHtmlAttr($_attribute->getAttributeId()) ?>]"
data-selector="super_attribute[<?= $block->escapeHtmlAttr($_attribute->getAttributeId()) ?>]"
data-validate="{required:true}"
id="attribute<?= $block->escapeHtmlAttr($_attribute->getAttributeId()) ?>"
class="super-attribute-select">
<option value=""><?= $block->escapeHtml(__('Choose an Option...')) ?></option>
</select>
</div>
</div>
<?php endforeach; ?>
<script type="text/x-magento-init">
{
"#product_addtocart_form": {
"configurable": {
"spConfig": <?= /* @noEscape */ $block->getJsonConfig() ?>,
"gallerySwitchStrategy": "<?= $block->escapeJs($block->getVar(
'gallery_switch_strategy',
'Magento_ConfigurableProduct'
) ?: 'replace'); ?>"
}
},
"*" : {
"Magento_ConfigurableProduct/js/catalog-add-to-cart": {}
}
}
</script>
<?php endif;?>