1

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

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

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

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

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

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

  • 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. – Utsav Gupta Dec 10 '18 at 9:08
  • You will need to add all the address in dropdown and need to write dropdown change event. – Ashish Viradiya Dec 10 '18 at 9:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.