cancel
Showing results for 
Search instead for 
Did you mean: 

Problem by overriding Magento_Swatches renderer.phtml

Problem by overriding Magento_Swatches renderer.phtml

Hi All, 

I try to override Magento_Swatchs renderer.phtml In order to change the way the configurations are displayed and I get an error even with the original Magento file.

Error I get : 

1 exception(s):
Exception #0 (Exception): Warning: Invalid argument supplied for foreach() in /var/www/jkcmage/app/design/frontend/Smartwave/porto_child/Magento_Swatches/templates/product/view/renderer.phtml on line 16

Exception #0 (Exception): Warning: Invalid argument supplied for foreach() in /var/www/jkcmage/app/design/frontend/Smartwave/porto_child/Magento_Swatches/templates/product/view/renderer.phtml on line 16
<pre>#1 include() called at [lib/internal/Magento/Framework/View/TemplateEngine/Php.php:59]
#2 Magento\Framework\View\TemplateEngine\Php->render() called at [lib/internal/Magento/Framework/View/Element/Template.php:271]
#3 Magento\Framework\View\Element\Template->fetchView() called at [generated/code/Magento/Swatches/Block/Product/Renderer/Configurable/Interceptor.php:609]
#4 Magento\Swatches\Block\Product\Renderer\Configurable\Interceptor->fetchView() called at [lib/internal/Magento/Framework/View/Element/Template.php:301]
#5 Magento\Framework\View\Element\Template->_toHtml() called at [app/code/Magento/Swatches/Block/Product/Renderer/Configurable.php:461]
#6 Magento\Swatches\Block\Product\Renderer\Configurable->getHtmlOutput() called at [app/code/Magento/Swatches/Block/Product/Renderer/Configurable.php:439]
#7 Magento\Swatches\Block\Product\Renderer\Configurable->_toHtml() called at [lib/internal/Magento/Framework/View/Element/AbstractBlock.php:668]
#8 Magento\Framework\View\Element\AbstractBlock->toHtml() called at [app/code/Magento/Swatches/Block/Product/Renderer/Configurable.php:429]
#9 Magento\Swatches\Block\Product\Renderer\Configurable->toHtml() called at [generated/code/Magento/Swatches/Block/Product/Renderer/Configurable/Interceptor.php:89]
#10 Magento\Swatches\Block\Product\Renderer\Configurable\Interceptor->toHtml() called at [lib/internal/Magento/Framework/View/Layout.php:557]
#11 Magento\Framework\View\Layout->_renderBlock() called at [lib/internal/Magento/Framework/View/Layout.php:533]
#12 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#13 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#14 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#15 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Element/AbstractBlock.php:512]
#16 Magento\Framework\View\Element\AbstractBlock->getChildHtml() called at [generated/code/Magento/Catalog/Block/Product/View/Interceptor.php:778]
#17 Magento\Catalog\Block\Product\View\Interceptor->getChildHtml() called at [app/code/Magento/Catalog/view/frontend/templates/product/view/options/wrapper.phtml:15]
#18 include() called at [lib/internal/Magento/Framework/View/TemplateEngine/Php.php:59]
#19 Magento\Framework\View\TemplateEngine\Php->render() called at [lib/internal/Magento/Framework/View/Element/Template.php:271]
#20 Magento\Framework\View\Element\Template->fetchView() called at [generated/code/Magento/Catalog/Block/Product/View/Interceptor.php:544]
#21 Magento\Catalog\Block\Product\View\Interceptor->fetchView() called at [lib/internal/Magento/Framework/View/Element/Template.php:301]
#22 Magento\Framework\View\Element\Template->_toHtml() called at [lib/internal/Magento/Framework/View/Element/AbstractBlock.php:668]
#23 Magento\Framework\View\Element\AbstractBlock->toHtml() called at [generated/code/Magento/Catalog/Block/Product/View/Interceptor.php:869]
#24 Magento\Catalog\Block\Product\View\Interceptor->toHtml() called at [lib/internal/Magento/Framework/View/Layout.php:557]
#25 Magento\Framework\View\Layout->_renderBlock() called at [lib/internal/Magento/Framework/View/Layout.php:533]
#26 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#27 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#28 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#29 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Element/AbstractBlock.php:543]
#30 Magento\Framework\View\Element\AbstractBlock->getChildChildHtml() called at [generated/code/Magento/Catalog/Block/Product/View/Interceptor.php:791]
#31 Magento\Catalog\Block\Product\View\Interceptor->getChildChildHtml() called at [app/code/Magento/Catalog/view/frontend/templates/product/view/form.phtml:32]
#32 include() called at [lib/internal/Magento/Framework/View/TemplateEngine/Php.php:59]
#33 Magento\Framework\View\TemplateEngine\Php->render() called at [lib/internal/Magento/Framework/View/Element/Template.php:271]
#34 Magento\Framework\View\Element\Template->fetchView() called at [generated/code/Magento/Catalog/Block/Product/View/Interceptor.php:544]
#35 Magento\Catalog\Block\Product\View\Interceptor->fetchView() called at [lib/internal/Magento/Framework/View/Element/Template.php:301]
#36 Magento\Framework\View\Element\Template->_toHtml() called at [lib/internal/Magento/Framework/View/Element/AbstractBlock.php:668]
#37 Magento\Framework\View\Element\AbstractBlock->toHtml() called at [generated/code/Magento/Catalog/Block/Product/View/Interceptor.php:869]
#38 Magento\Catalog\Block\Product\View\Interceptor->toHtml() called at [lib/internal/Magento/Framework/View/Layout.php:557]
#39 Magento\Framework\View\Layout->_renderBlock() called at [lib/internal/Magento/Framework/View/Layout.php:533]
#40 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#41 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#42 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#43 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Layout.php:585]
#44 Magento\Framework\View\Layout->_renderContainer() called at [lib/internal/Magento/Framework/View/Layout.php:535]
#45 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#46 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#47 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#48 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Layout.php:585]
#49 Magento\Framework\View\Layout->_renderContainer() called at [lib/internal/Magento/Framework/View/Layout.php:535]
#50 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#51 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#52 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#53 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Layout.php:585]
#54 Magento\Framework\View\Layout->_renderContainer() called at [lib/internal/Magento/Framework/View/Layout.php:535]
#55 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#56 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#57 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#58 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Layout.php:585]
#59 Magento\Framework\View\Layout->_renderContainer() called at [lib/internal/Magento/Framework/View/Layout.php:535]
#60 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#61 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#62 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#63 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Layout.php:585]
#64 Magento\Framework\View\Layout->_renderContainer() called at [lib/internal/Magento/Framework/View/Layout.php:535]
#65 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#66 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#67 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#68 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Layout.php:585]
#69 Magento\Framework\View\Layout->_renderContainer() called at [lib/internal/Magento/Framework/View/Layout.php:535]
#70 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#71 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#72 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#73 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Layout.php:585]
#74 Magento\Framework\View\Layout->_renderContainer() called at [lib/internal/Magento/Framework/View/Layout.php:535]
#75 Magento\Framework\View\Layout->renderNonCachedElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:206]
#76 Magento\Framework\View\Layout\Interceptor->renderNonCachedElement() called at [lib/internal/Magento/Framework/View/Layout.php:488]
#77 Magento\Framework\View\Layout->renderElement() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:193]
#78 Magento\Framework\View\Layout\Interceptor->renderElement() called at [lib/internal/Magento/Framework/View/Layout.php:954]
#79 Magento\Framework\View\Layout->getOutput() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:58]
#80 Magento\Framework\View\Layout\Interceptor->___callParent() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:138]
#81 Magento\Framework\View\Layout\Interceptor->Magento\Framework\Interception\{closure}() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:153]
#82 Magento\Framework\View\Layout\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:494]
#83 Magento\Framework\View\Layout\Interceptor->getOutput() called at [lib/internal/Magento/Framework/View/Result/Page.php:258]
#84 Magento\Framework\View\Result\Page->render() called at [lib/internal/Magento/Framework/View/Result/Layout.php:171]
#85 Magento\Framework\View\Result\Layout->renderResult() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:58]
#86 Magento\Framework\View\Result\Page\Interceptor->___callParent() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:138]
#87 Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}() called at [lib/internal/Magento/Framework/Interception/Interceptor.php:153]
#88 Magento\Framework\View\Result\Page\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/View/Result/Page/Interceptor.php:130]
#89 Magento\Framework\View\Result\Page\Interceptor->renderResult() called at [lib/internal/Magento/Framework/App/Http.php:140]
#90 Magento\Framework\App\Http->launch() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:24]
#91 Magento\Framework\App\Http\Interceptor->launch() called at [lib/internal/Magento/Framework/App/Bootstrap.php:258]
#92 Magento\Framework\App\Bootstrap->run() called at [pub/index.php:40]
</pre>

I simply pasted this file : 

app/code/Magento/Swatches/view/frontend/templates/product/layered/renderer.phtml

Here :

app/design/frontend/[VendorName]/[theme]/Magento_Swatches/templates/product/view/renderer.phtml


Content of Renderer.phtml :

<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

// @codingStandardsIgnoreFile

/** @var $block \Magento\Swatches\Block\LayeredNavigation\RenderLayered */
?>
<?php $swatchData = $block->getSwatchData(); ?>
<div class="swatch-attribute swatch-layered <?= /* @escapeNotVerified */ $swatchData['attribute_code'] ?>"
     attribute-code="<?= /* @escapeNotVerified */ $swatchData['attribute_code'] ?>"
     attribute-id="<?= /* @escapeNotVerified */ $swatchData['attribute_id'] ?>">
    <div class="swatch-attribute-options clearfix">
        <?php foreach ($swatchData['options'] as $option => $label): ?>
            <a href="<?= /* @escapeNotVerified */ $label['link'] ?>"
               aria-label="<?= /* @escapeNotVerified */ $label['label'] ?>"
               class="swatch-option-link-layered">
                <?php if (isset($swatchData['swatches'][$option]['type'])) { ?>
                    <?php switch ($swatchData['swatches'][$option]['type']) {
                        case '3':
                            ?>
                            <div class="swatch-option <?= /* @escapeNotVerified */ $label['custom_style'] ?>"
                                 tabindex="-1"
                                 option-type="3"
                                 option-id="<?= /* @escapeNotVerified */ $option ?>"
                                 option-label="<?= /* @escapeNotVerified */ $label['label'] ?>"
                                 option-tooltip-thumb=""
                                 option-tooltip-value=""
                            ></div>
                            <?php    break;
                        case '2':
                            ?>
                            <?php $swatchThumbPath = $block->getSwatchPath('swatch_thumb',
                            $swatchData['swatches'][$option]['value']); ?>
                            <?php $swatchImagePath = $block->getSwatchPath('swatch_image',
                            $swatchData['swatches'][$option]['value']); ?>
                            <div class="swatch-option image <?= /* @escapeNotVerified */ $label['custom_style'] ?>"
                                 tabindex="-1"
                                 option-type="2"
                                 option-id="<?= /* @escapeNotVerified */ $option ?>"
                                 option-label="<?= /* @escapeNotVerified */ $label['label'] ?>"
                                 option-tooltip-thumb="<?= /* @escapeNotVerified */ $swatchThumbPath ?>"
                                 option-tooltip-value=""
                                 style="background: url(<?= /* @escapeNotVerified */ $swatchImagePath ?>) no-repeat center; background-size: initial;"></div>
                            <?php    break;
                        case '1':
                            ?>
                            <div class="swatch-option color <?= /* @escapeNotVerified */ $label['custom_style'] ?>"
                                 tabindex="-1"
                                 option-type="1"
                                 option-id="<?= /* @escapeNotVerified */ $option ?>"
                                 option-label="<?= /* @escapeNotVerified */ $label['label'] ?>"
                                 option-tooltip-thumb=""
                                 option-tooltip-value="<?= /* @escapeNotVerified */ $swatchData['swatches'][$option]['value'] ?>"
                                 style="background: <?= /* @escapeNotVerified */ $swatchData['swatches'][$option]['value'] ?> no-repeat center; background-size: initial;"></div>
                            <?php    break;
                        case '0':
                        default:
                            ?>
                            <div class="swatch-option text <?= /* @escapeNotVerified */ $label['custom_style'] ?>"
                                 tabindex="-1"
                                 option-type="0"
                                 option-id="<?= /* @escapeNotVerified */ $option ?>"
                                 option-label="<?= /* @escapeNotVerified */ $label['label'] ?>"
                                 option-tooltip-thumb=""
                                 option-tooltip-value=""
                            ><?= /* @escapeNotVerified */ $swatchData['swatches'][$option]['value'] ?></div>
                            <?php    break;
                    } ?>
                <?php } ?>
            </a>
        <?php endforeach; ?>
    </div>
</div>


<div class="swatch-opt" data-role="swatch-options"></div>

<script type="text/x-magento-init">
    {
        "[data-role=swatch-options]": {
            "Magento_Swatches/js/swatch-renderer": {
                "jsonConfig": <?= /* @escapeNotVerified */ $swatchOptions = $block->getJsonConfig() ?>,
                "jsonSwatchConfig": <?php /* @escapeNotVerified */
    echo $swatchOptions = $block->getJsonSwatchConfig(); ?>,
                "mediaCallback": "<?= /* @escapeNotVerified */ $block->getMediaCallback() ?>",
                "gallerySwitchStrategy": "<?php /* @escapeNotVerified */ echo $block->getVar('gallery_switch_strategy',
        'Magento_ConfigurableProduct') ?: 'replace'; ?>",
                "jsonSwatchImageSizeConfig": <?php /* @noEscape */ echo $block->getJsonSwatchSizeConfig() ?>
            }
        },
        "*" : {
            "Magento_Swatches/js/catalog-add-to-cart": {}
        }
    }
</script>


<script>
    require(["jquery", "jquery/ui", "Magento_Swatches/js/swatch-renderer"], function ($) {
        $('.swatch-layered.<?= /* @escapeNotVerified */ $swatchData['attribute_code'] ?>')
            .find('[option-type="1"], [option-type="2"], [option-type="0"], [option-type="3"]')
            .SwatchRendererTooltip();
    });
</script>


What I would like to do : 

I would like to change the display caused by the "case '2':"
Could someone tell me what I'm doing wrong?

Magento 2.3.1 Community EDITION.


Thanks in advance ! 

Regards,
Florian