Question

In the standard left navigation catalog/navigation/left.phtml of Magento 1.9 when entering a child category, with no children of its own, the navigation area is left blank. For these childless categories only, I would like to show sibling categories in the left navigation.

For example:

Parent Category

  • Child A
  • Child B
  • Child C

In the above scenario, if I navigated to 'Child A' then 'Child A, Child B and Child C' would be shown in the left navigation bar (with Child A ideally being shown in bold).

My current navigation/left.phtml code is:

<?php if (!Mage::registry('current_category')) return ?>
<?php $_categories = $this->getCurrentChildCategories() ?>
<?php $_count = is_array($_categories)?count($_categories):$_categories->count(); ?>
<?php if($_count): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Browse By') ?></span></strong>
    </div>
    <div class="block-content">
        <dl id="narrow-by-list2">
            <!--<dt><?php echo $this->__('Category') ?></dt>-->
            <dd>
                <ol>
                <?php foreach ($_categories as $_category): ?>
                    <?php if($_category->getIsActive()): ?>
                    <li>
                        <a href="<?php echo $this->getCategoryUrl($_category) ?>"<?php if ($this->isCategoryActive($_category)): ?> class="current"<?php endif; ?>><?php echo $this->escapeHtml($_category->getName()) ?></a>
                    </li>
                    <?php endif; ?>
                <?php endforeach ?>
                </ol>
            </dd>
        </dl>
        <script type="text/javascript">decorateDataList('narrow-by-list2')</script>
    </div>
</div>
<?php endif; ?>

Can an edit be suggested to the above, please, to get this working as desired?

Was it helpful?

Solution 3

Manged to adapt @Sukumar Gorai answer above to get it working how I wanted it to, as per my original question.

Revised code for /navigation/left.phtml.

<?php if (!Mage::registry('current_category')) return ?>
<?php $currentCategory = Mage::registry('current_category'); ?>
<?php $_countchildren = count($currentCategory->getChildrenCategories()); ?>
<?php if ($_countchildren == 0): { ?>
<?php $_categories = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
        $_categories->addAttributeToSelect('*')
        ->addAttributeToFilter('parent_id', $currentCategory->getParentId()) //siblings have the same parent as the current category
        ->addAttributeToFilter('is_active', 1)//get only active categories
        ->addAttributeToSort('position'); ?>
<?php $_count = is_array($_categories)?count($_categories):$_categories->count(); ?>
<?php if($_count): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Browse By') ?></span></strong>
    </div>
    <div class="block-content">
        <dl id="narrow-by-list2">
            <!--<dt><?php echo $this->__('Category') ?></dt>-->
            <dd>
                <ol>
                <?php foreach ($_categories as $_category): ?>
                    <?php if($_category->getIsActive()): ?>
                    <li>
                        <a href="<?php echo $_category->getUrl() ?>"<?php if ($currentCategory->getId() == $_category->getId()): ?> class="current"<?php endif; ?>><?php echo $this->escapeHtml($_category->getName()) ?></a>
                    </li>
                    <?php endif; ?>
                <?php endforeach ?>
                </ol>
            </dd>
        </dl>
        <script type="text/javascript">decorateDataList('narrow-by-list2')</script>
    </div>
</div>
<?php endif; ?>
<?php } elseif ($_countchildren != 0): { ?>
<?php $_categories = $this->getCurrentChildCategories() ?>
<?php $_count = is_array($_categories)?count($_categories):$_categories->count(); ?>
<?php if($_count): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Browse By') ?></span></strong>
    </div>
    <div class="block-content">
        <dl id="narrow-by-list2">
            <!--<dt><?php echo $this->__('Category') ?></dt>-->
            <dd>
                <ol>
                <?php foreach ($_categories as $_category): ?>
                    <?php if($_category->getIsActive()): ?>
                    <li>
                        <a href="<?php echo $this->getCategoryUrl($_category) ?>"<?php if ($this->isCategoryActive($_category)): ?> class="current"<?php endif; ?>><?php echo $this->escapeHtml($_category->getName()) ?></a>
                    </li>
                    <?php endif; ?>
                <?php endforeach ?>
                </ol>
            </dd>
        </dl>
        <script type="text/javascript">decorateDataList('narrow-by-list2')</script>
    </div>
</div>
<?php endif; ?>
<?php } endif; ?>

OTHER TIPS

For achieve it you need to edit below file from your theme:

frontend/XYZ/THEME/template/catalog/layer/view.phtml

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License (AFL 3.0)
 * that is bundled with this package in the file LICENSE_AFL.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/afl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magento.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magento.com for more information.
 *
 * @category    design
 * @package     rwd_default
 * @copyright   Copyright (c) 2006-2015 X.commerce, Inc. (http://www.magento.com)
 * @license     http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */
?>
<?php
/**
 * Category layered navigation
 *
 * @see Mage_Catalog_Block_Layer_View
 */
?>
<?php if($this->canShowBlock()): ?>
<div class="block block-layered-nav<?php if (!$this->getLayer()->getState()->getFilters()): ?> block-layered-nav--no-filters<?php endif; ?>">
    <div class="block-title">
        <strong><span><?php echo $this->__('Shop By') ?></span></strong>
    </div>
    <div class="block-content toggle-content">
        <?php echo $this->getStateHtml() ?>
        <?php if ($this->getLayer()->getState()->getFilters()): ?>
            <div class="actions"><a href="<?php echo $this->getClearUrl() ?>"><?php echo $this->__('Clear All') ?></a></div>
        <?php endif; ?>
        <?php if($this->canShowOptions()): ?>
            <p class="block-subtitle block-subtitle--filter"><?php echo $this->__('Filter') ?></p>
            <dl id="narrow-by-list">
                <?php $_filters = $this->getFilters() ?>
                <?php foreach ($_filters as $_filter): ?>
                <?php if($_filter->getItemsCount()): ?>
                    <dt><?php echo $this->__($_filter->getName()) ?></dt>
                    <dd><?php echo $_filter->getHtml() ?></dd>
                <?php endif; ?>
                <?php endforeach; ?>
            </dl>
            <script type="text/javascript">decorateDataList('narrow-by-list')</script>
        <?php endif; ?>
    </div>
</div>
<?php else: 
       $_categories = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
       $_categories->addAttributeToSelect('*')
        ->addAttributeToFilter('parent_id', Mage::registry('current_category')->getParentId()) //siblings have the same parent as the current category
        ->addAttributeToFilter('is_active', 1)//get only active categories
        ->addAttributeToSort('position');//sort by position
    ?>
    <div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Browse By') ?></span></strong>
    </div>
    <div class="block-content">
        <dl id="narrow-by-list2">
            <!--<dt><?php echo $this->__('Category') ?></dt>-->
            <dd>
                <ol>
                <?php foreach ($_categories as $_category): ?>
                    <?php if($_category->getIsActive()): ?>
                    <li>
                        <a href="<?php echo $_category->getUrl();?>"><?php echo $_category->getName();?></a>
                    </li>
                    <?php endif; ?>
                <?php endforeach ?>
                </ol>
            </dd>
        </dl>
        <script type="text/javascript">decorateDataList('narrow-by-list2')</script>
    </div>
    </div>
<?php endif; ?>

Code for non-anchor categories:

Use the below code for navigation/left.phtml:

<?php if (!Mage::registry('current_category')) return ?>
<?php $currentCategory = Mage::registry('current_category'); ?>
<?php $_categories = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
        $_categories->addAttributeToSelect('*')
        ->addAttributeToFilter('parent_id', $currentCategory->getParentId()) //siblings have the same parent as the current category
        ->addAttributeToFilter('is_active', 1)//get only active categories
        ->addAttributeToSort('position'); ?>

<?php $_count = is_array($_categories)?count($_categories):$_categories->count(); ?>
<?php if($_count): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Browse By') ?></span></strong>
    </div>
    <div class="block-content">
        <dl id="narrow-by-list2">
            <!--<dt><?php echo $this->__('Category') ?></dt>-->
            <dd>
                <ol>
                <?php foreach ($_categories as $_category): ?>
                    <?php if($_category->getIsActive()): ?>
                    <li>
                        <a href="<?php echo $_category->getUrl() ?>"<?php if ($currentCategory->getId() == $_category->getId()): ?> class="current"<?php endif; ?>><?php echo $this->escapeHtml($_category->getName()) ?></a>
                    </li>
                    <?php endif; ?>
                <?php endforeach ?>
                </ol>
            </dd>
        </dl>
        <script type="text/javascript">decorateDataList('narrow-by-list2')</script>
    </div>
</div>
<?php endif; ?>

You need to set bold for current category then add the following css to your css files:

<style type="text/css">
    .current{font-weight: bold;}
</style>

Code for anchor categories: Use the below code for layer/view.phtml:

<?php $currentCategory = Mage::registry('current_category'); ?>
<?php $_categories = Mage::getModel('catalog/category')->getCollection()->setStoreId(Mage::app()->getStore()->getId());
        $_categories->addAttributeToSelect('*')
        ->addAttributeToFilter('parent_id', $currentCategory->getParentId()) //siblings have the same parent as the current category
        ->addAttributeToFilter('is_active', 1)//get only active categories
        ->addAttributeToSort('position'); ?>

<?php $_count = is_array($_categories)?count($_categories):$_categories->count(); ?>
<?php if($_count): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Browse By') ?></span></strong>
    </div>
    <div class="block-content">
        <dl id="narrow-by-list2">
            <!--<dt><?php echo $this->__('Category') ?></dt>-->
            <dd>
                <ol>
                <?php foreach ($_categories as $_category): ?>
                    <li>
                        <a href="<?php echo $_category->getUrl(); ?>"<?php if ($currentCategory->getId() == $_category->getId()): ?> class="current"<?php endif; ?>><?php echo $this->escapeHtml($_category->getName()) ?></a>
                    </li>
                <?php endforeach ?>
                </ol>
            </dd>
        </dl>
        <script type="text/javascript">decorateDataList('narrow-by-list2')</script>
    </div>
</div>
<?php endif; ?>
<?php if($this->canShowBlock()): ?>
<div class="block block-layered-nav">
    <div class="block-title">
        <strong><span><?php echo $this->__('Shop By') ?></span></strong>
    </div>
    <div class="block-content">
        <?php echo $this->getStateHtml() ?>
        <?php if ($this->getLayer()->getState()->getFilters()): ?>
            <div class="actions"><a href="<?php echo $this->getClearUrl() ?>"><?php echo $this->__('Clear All') ?></a></div>
        <?php endif; ?>
        <?php if($this->canShowOptions()): ?>
            <p class="block-subtitle"><?php echo $this->__('Shopping Options') ?></p>
            <dl id="narrow-by-list">
                <?php $_filters = $this->getFilters() ?>
                <?php foreach ($_filters as $_filter): ?>
                <?php if($_filter->getItemsCount() && $_filter->getName() != 'Category'): ?>
                    <dt><?php echo $this->__($_filter->getName()) ?></dt>
                    <dd><?php echo $_filter->getHtml() ?></dd>
                <?php endif; ?>
                <?php endforeach; ?>
            </dl>
            <script type="text/javascript">decorateDataList('narrow-by-list')</script>
        <?php endif; ?>
    </div>
</div>
<?php endif; ?>

You need to set bold for current category then add the following css to your css files:

<style type="text/css">
    .current{font-weight: bold;}
</style>
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top