08.04.2025・Allgemein
08.04.2025・Allgemein

Magento 2 UIComponent doesn’t show template

Fabian Blechschmidt

Small hint from our daily life as developers: If your default template for your ui component doesn’t show up, it might be, because you overwrote it in your template 😉

So you defined your default template like this:

;define([
    // ...
    'Magento_Ui/js/form/element/select',
    // ...
], function (/* ... */ select, /* ... */) {
    'use strict';

    let self;

    return select.extend({

        defaults: {
            elementTmpl: 'Customer_Plugin/shipping-option-select-element'
        }
        // ...
    });
});

But then you overwrite it in your layout xml, like view/frontend/layout/checkout_index_index.xml

I tried to cleanup the XML to make it easier readable but not remove the inheritance. Not an easy job.

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceBlock name="checkout.root">
            <arguments>
                <argument name="jsLayout" xsi:type="array">
                    <item name="components" xsi:type="array">
                        <item name="checkout" xsi:type="array">
                            <item name="children" xsi:type="array">
                                <item name="steps" xsi:type="array">
                                    <item name="children" xsi:type="array">
                                        <item name="shipping-step" xsi:type="array">
                                            <item name="children" xsi:type="array">
                                                <item name="shippingAddress" xsi:type="array">
                                                    <item name="children" xsi:type="array">
                                                        <item name="shippingAdditional" xsi:type="array">
                                                            <item name="children" xsi:type="array">
                                                                <item name="shipping-option-wrapper" xsi:type="array">
                                                                    <item name="children" xsi:type="array">
                                                                        <item name="shipping-option" xsi:type="array">
                                                                            <item name="children" xsi:type="array">
                                                                                <item name="select-date" xsi:type="array">
                                                                                    <item name="component" xsi:type="string"> Customer_Plugin/js/view/shipping-option-select</item>
                                                                                    <item name="config" xsi:type="array">
                                                                                        <!-- HERE THE TEMPLATE IS OVERWRITTEN -->
                                                                                        <item name="elementTmpl" xsi:type="string">ui/form/element/select</item>
                                                                                    </item>
                                                                                </item>
                                                                            </item>
                                                                        </item>
                                                                    </item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>