2

How can I override the shipping block and show my custom shipping addresses there with the module?

I have one custom table which has addresses with website id. I need to display that address in the shipping address section website-wise. It will show the address to the user which are related to that website on the checkout page.

i.e. if i have 2 address in my custom table for website dev. then when I come to the checkout page of the dev website. I need to show that 2 addresses there for the user to select anyone and do the checkout process.

I have multiple addresses that need to be shown in front, so, user can select any one and go through.

I have one idea that I want to override the shipping address block and show there drop down of all addresses which are saved, then on the selection of address filled the shipping address form in hidden and fire save shipping address event. will it be useful?

Charlie
3,1567 gold badges40 silver badges64 bronze badges
asked Dec 10, 2018 at 7:37

1 Answer 1

0

In that case you need a plugin for this.

Create di.xml Vendor/Module/etc/frontend/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
 <type name="Magento\Checkout\Block\Checkout\LayoutProcessor">
 <plugin name="vendor_assign_default_value" type="Vendor\Module\Plugin\Checkout\Model\Checkout\LayoutProcessor" sortOrder="100"/>
 </type>
</config>

Create LayoutProcessor.php Vendor/Module/Plugin/Checkout/Model/Checkout/LayoutProcessor.php

namespace Vendor\Module\Plugin\Checkout\Model\Checkout;
class LayoutProcessor
{
 /**
 * @param \Magento\Checkout\Block\Checkout\LayoutProcessor $subject
 * @param array $jsLayout
 * @return array
 */
 public function afterProcess(
 \Magento\Checkout\Block\Checkout\LayoutProcessor $subject,
 array $jsLayout
 ) {
 $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
 ['shippingAddress']['children']['shipping-address-fieldset']['children']['firstname']['value'] = 'FirstName';
 $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']
 ['shippingAddress']['children']['shipping-address-fieldset']['children']['company']['value'] = 'Demo Company';
 return $jsLayout;
 }
}

If its not work then you will need to move your di.xml file from :

app/code/Vendor/Module/etc/frontend/di.xml

To

app/code/Vendor/Module/etc/di.xml

With code.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
 <type name="Magento\Checkout\Block\Checkout\LayoutProcessor">
 <plugin name="vendor_assign_default_value" type="Vendor\Module\Plugin\Checkout\Model\Checkout\LayoutProcessor" sortOrder="100"/>
 </type>
</config>

Thanks To: https://magento.stackexchange.com/a/141544/62614 https://magento.stackexchange.com/a/202727/62614

answered Dec 10, 2018 at 8:19
2
  • Thanks for your help. but this is for single address. but i have multiple addresses in database. that i want to show in front end and user need to select anyone address. and go further. Commented Dec 10, 2018 at 9:08
  • You will need to add all the address in dropdown and need to write dropdown change event. Commented Dec 10, 2018 at 9:35

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.