0

How to give condition in xml file for showing different block in different pages. Like I place a block name "Footer Block" in default xml file, and I want different footer for different pages.

    <referenceContainer name="footer">
        <block class="Magento\Cms\Block\Block" name="footer_links_block">
            <arguments>
                <argument name="block_id" xsi:type="string">footer_links_block</argument>
            </arguments>
        </block>
    </referenceContainer>

I want this that this footer only will show in home page and I want to different footer block for other pages. How I can do it in Magento 2.2.5

Thank You

  • Please clarify, by different pages you mean different type of pages or like different category pages/ different product pages? – Vivek Kumar Sep 7 '18 at 14:58
  • I want to show footer in home page and different footer for other pages. And this footer section I have done by block. In default.xml file I fetch this block. So I want any condition that I can differentiate in xml file. How I can do this. Thank you for your reply. – M.Suman Sep 8 '18 at 7:04
  • Hello @Vivek Kumar, is there any way to do this functionality? Sorry, that before I didn't clarify the question clearly. Please help, if is there any way to do this. Thank you. – M.Suman Sep 10 '18 at 7:32
1

Okay, I got the solution. I call the .phtml page into .xml file, like this.

default.xml

    <referenceContainer name="footer">
        <container name="footer-custom" htmlTag="div" htmlClass="footer-custom">
            <block class="Magento\Framework\View\Element\Template" name="footer_upper" template="Magento_Theme::html/footer.phtml">                   
            </block>                
        </container>
    </referenceContainer>

and then in .phtml file I place the condition and fetch the block there, like this.

footer.phtml

<?php
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $cmsPage = $objectManager->get('\Magento\Cms\Model\Page');
    $cmsIdent = $cmsPage->getIdentifier();
?>

<?php
    if ($cmsIdent == 'home') {

        echo $block->getLayout()
           ->createBlock('Magento\Cms\Block\Block')
           ->setBlockId('footer_links_block')
           ->toHtml();

    } else {

        echo $block->getLayout()
           ->createBlock('Magento\Cms\Block\Block')
           ->setBlockId('footer_links_block_for_others')
           ->toHtml();

    }
?>

It works perfect for me. Thank you.

0

If you have to show it only for home page, then more appropriate solution will be to show them via cms_index_index.xml. In that way, you can manage everything via XML too including containers if you have to add them in near future.

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.