magento2: Can not Overwrite Core Blocks In Custom Modules
Steps to reproduce
- Had to add extra table after sales order item for our Booking Module
- Tried to overwrite sales_order_item_renderers.xml from my module
Expected result
- After the block override, user should be able to view booking times with new participants details directly below the item purchased
Easy fix
-
This issue is due to this line in sales_order_item_renderers.xml
<referenceBlock name="sales.order.items.renderers"> <block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" as="default" template="order/items/renderer/default.phtml"/> </referenceBlock>
I can not override this if name is not present. If above code change to
<referenceBlock name="sales.order.items.renderers">
<block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" name="sales.order.items.renderer.default" as="default" template="order/items/renderer/default.phtml"/>
</referenceBlock>
So I can override it by our module
<referenceBlock name="sales.order.items.renderers">
<block class="Magento\Sales\Block\Order\Item\Renderer\DefaultRenderer" name="sales.order.items.renderer.default" as="default" template="Stepzerosolutions_Timeslotbooking::order/items/renderer/default.phtml"/>
</referenceBlock>
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Comments: 26 (5 by maintainers)
@nobuttsalex your method is working just their is small change is directory structure di.xml file should be in
Vendor/Module/etc/di.xmlinstead ofVendor/Module/etc/frontend/di.xmlHere is the code that i use for override default renderer of email template.
Vendor/Module/etc/di.xml
Vendor/Module/Block/Order/Email/Items/Order/DefaultOrder.php
For override default.phtml file copy from
magento\module-sales\view\frontend\templates\email\items\order\default.phtmlto your moduleVendor/Module/view/frontend/templates/email/items/order/default.phtmlHaving the same issue while overriding default email order template in file app/code/Vendor/Module/view/frontend/layout/sales_email_order_renderers.xml `<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd" label="Email Creditmemo Items List" design_abstraction="custom">
</page>`
Giving exception: main.CRITICAL: Magento\Framework\Exception\LocalizedException: The element ‘sales.email.order.renderers’ already has a child with alias ‘default’ in /var/www/vhosts/shop/vendor/magento/framework/Data/Structure.php:611
and if we remove the alias “as = default” from xml file…
<block class="Magento\Sales\Block\Order\Email\Items\Order\DefaultOrder" name="sales.email.order.renderers.default" template="Vendor_Module::email/items/order/default.phtml"/>file doesn’t get override. Any way to override default template?
Not ideal but can be done using a preference and overriding setTemplate.
etc/fontend/di.xml
Block/Order/Item/Renderer/DefaultRenderer.php
@forgeonline ok, i will try to find this.
@shruti-ranium enjoy!
above code worked for me.Thanks.
Another option you have is to set your template to the
overriden_templatesargument of<block class="Magento\Sales\Block\Order\Items" name="order_items" template="order/items.phtml">