0

Can anybody tell how to move block in Magento2 using observer or maybe other class without using "move" tag in layout xml.

I know about this method in layout, but I can not use it.

<move element="name" destination="to" before="-"/>

In my case "move" depends on 2 store config values.

And YES, I saw this: Magento 2 - Move block or container only for specific Device

Thank

1 Answer 1

4

In your observer, check if the conditions for moving the block are met. if so, get the layout and manually add a layout update within the observer.

Here's an example that uses an observer on layout_load_before:

namespace Company\Module\Observer;

class LayoutLoadBefore implements \Magento\Framework\Event\ObserverInterface
{
    /**
     * add custom layout updates
     *
     * @param \Magento\Framework\Event\Observer $observer
     * @return $this
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $move = false;

        // add your checks here

        if ($move) {
            /** @var \Magento\Framework\View\LayoutInterface $layout */
            $layout = $observer->getData('layout');
            $layout->getUpdate()->addUpdate('<move element="blah" destination="to" before="-" />');
        }

        return $this;
    }
}

this event conveniently provides access to the layout. if you are stuck with a specific event, there are other ways to access the current layout to add the update.

Your Answer

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

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