cancel
Showing results for 
Search instead for 
Did you mean: 

M2.2.6 - White screen shows when a custom layout loads

M2.2.6 - White screen shows when a custom layout loads

I followed this post. However, I am getting a white screen on the Tier 3 category pages.

 

Troubleshooting steps:

  • Cleared the browser cookies/cache.
  • Flushed the cache using 
    php bin/magento cache:flush
    php bin/magento setup:upgrade
    php bin/magento setup:static-content:deploy -f
    php bin/magento indexer:reindex
    php bin/magento cache:clean
  • Re-set my permissions.

I have attached my code, but removed the Client's namespace and replaced it with VendorName due NDA.

 

If anyone is able to advise to the possible cause, I would really appreciate it.

 

app/code/VendorName/CategoryPages/registration.php

 

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'VendorName_CategoryPages',
__DIR__
); ?>

 

 

app/code/VendorName/CategoryPages/etc/config.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
  <default>
    <categorypages>
      <general>
        <enable_frontend>1</enable_frontend>
      </general>
    </categorypages>
  </default>
</config>

 

app/code/VendorName/CategoryPages/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
  <module name="VendorName_CategoryPages" setup_version="1.0.0">
  </module>
</config>

 

app/code/VendorName/CategoryPages/etc/frontend/events.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
  <event name="layout_load_before">
    <observer name="vendorname_categorypages_layout_load_before" instance="VendorName\CategoryPages\Observer\CategoryDepthLayout" />
  </event>
</config>

 

app/code/VendorName/CategoryPages/Observer

<?php

namespace VendorName\CategoryPages\Observer;

use Magento\Framework\Registry;
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Event\Observer;

class CategoryDepthLayout implements ObserverInterface
{
    const ACTION_NAME = 'catalog_category_view';

    /** @var Registry */
    private $registry;

    public function __construct(
        Registry $registry
    ) {
        $this->registry = $registry;
    }

    public function execute(Observer $observer)
    {
        if ($observer->getFullActionName() !== self::ACTION_NAME) {
            return;
        }

        $category = $this->registry->registry('current_category');

        /** @var \Magento\Framework\View\Layout $layout */
        $layout = $observer->getLayout();
        $layout->getUpdate()->addHandle(self::ACTION_NAME . '_level_' . $category->getLevel());
    }
}

 

 app/code/VendorName/CategoryPages/view/frontend/layout/catalog_category_view_level_3.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1columns" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
  <body>
    <referenceContainer name="columns.top">
      <container name="category.view.container" htmlTag="div" htmlClass="category-view" after="-">
        <block class="Magento\Catalog\Block\Category\View" template="VendorName_CategoryPages::level3.phtml"/>
      </container>
    </referenceContainer>
  </body>
</page>

 

app/code/VendorName/CategoryPages/view/frontend/templates/level3.phtml

<?php if (!$block->isContentMode() || $block->isMixedMode()): ?>
    <?= $block->getProductListHtml() ?>
<?php endif; ?>

<?php
    $category = $block->getCurrentCategory();
    $subcategories = $category->getChildrenCategories();
    $_helper = $this->helper('Magento\Catalog\Helper\Output');
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

    if (count($subcategories) > 0) {
        $subcategoryList = array();

        foreach($subcategories as $subcategory) {
            $subcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($subcategory->getId());

            $elements = array(
                'name'          => $subcategory->getName(),
                'description'   => $subcategory->getDescription(),
                'url'           => $subcategory->getUrl(),
                'image'         => $subcategory->getImageUrl(),
                'is_sale'       => $subcategory->getIsSale(),
                'is_active'     => $subcategory->getIsActive()
            );
            array_push($subcategoryList, $elements);
        }
    }

    $featuredCategoryList = $subcategoryList;

    $subcategoryListKeys = array_column($subcategoryList, 'name');
    $subcategoryListResult = array_multisort($subcategoryListKeys, SORT_ASC, $subcategoryList);
?>

<div class="container m4-parentcategory">
    <div class="row">
        <div class="col-12 col-md-8 col-md-offset-2 m4-categorydetails">

            <?php if ($category->getName() != '') { ?>
                <h2><?php echo $category->getName(); ?></h2>
            <?php } ?>

            <?php if ($category->getDescription() !== '') { ?>
                <?php echo $category->getDescription(); ?>
            <?php } ?>

        </div>
    </div>
</div>

<?php if (count($subcategories) > 0) { ?>
<div class="m4-featuredcategories" style="background-color: #efefef;">
    <div class="container">
        <div class="row">
            <div class="col-12">
                <h2>Featured Product Classes</h2>
            </div>
        </div>
        <div class="row">
            <div class="col-12">

                <?php foreach($subcategoryList as $data) { ?>
                    <?php if ($data['is_sale']) { ?>
                        <div class="m4-categorycard-container col-12 col-sm-6 col-md-4 col-lg-3">
                            <div class="m4-categorycard" style="border: 1px solid #666;">
                                <div class="">
                                    <a href="<?php echo $data['url']; ?>">
                                        <img src="<?php echo $data['image']; ?>" />
                                    </a>
                                </div>

                                <div style="padding: 10px;">
                                    <div style="text-align: center;">
                                        <a style="font-size: 14px; font-weight: bold !important;" href="<?php echo $data['url']; ?>"><?php echo $data['name']; ?></a>
                                    </div>

                                    <div>
                                        <?php echo $data['description']; ?>
                                    </div>

                                    <div style="text-align: center;">
                                        <a class="btn btn-primary" href="<?php echo $data['url']; ?>">Enquire</a>
                                    </div>
                                </div>
                            </div>
                        </div>
                    <?php } ?>
                <?php } ?>

            </div>
        </div>
    </div>
</div>
<?php } ?>

<div class="container m4-categories">
    <?php if (count($subcategories) > 0): ?>
        <div class="row">
            <div class="col-12">
                <h2>Product Classes</h2>
            </div>
        </div>
        <div class="row">
            <div class="col-12">

                <?php foreach($subcategoryList as $data) { ?>
                    <div class="m4-categorycard-container col-12 col-sm-6 col-md-4 col-lg-3">
                        <div class="m4-categorycard" style="border: 1px solid #666;">
                            <div class="">
                                <a href="<?php echo $data['url']; ?>">
                                    <img src="<?php echo $data['image']; ?>" />
                                </a>
                            </div>

                            <div style="padding: 10px;">
                                <div style="text-align: center;">
                                    <a style="font-size: 14px; font-weight: bold !important;" href="<?php echo $data['url']; ?>"><?php echo $data['name']; ?></a>
                                </div>

                                <div>
                                    <?php echo $data['description']; ?>
                                </div>

                                <div style="text-align: center;">
                                    <a class="btn btn-primary" href="<?php echo $data['url']; ?>">Enquire</a>
                                </div>
                            </div>
                        </div>
                    </div>
                <?php } ?>

            </div>
        </div>

        <!--
        <div class="row">
            <div class="col-12">
                <div class="load-more-button text-center">
                    <button class="btn btn-light" style="background-color: #666666; color: #ffffff;">Load More</button>
                </div>
            </div>
        </div>
        -->

    <?php else: ?>
        <?php if (!$block->isContentMode() || $block->isMixedMode()): ?>
            <?= $block->getProductListHtml() ?>
        <?php endif; ?>
    <?php endif; ?>
</div>