Wednesday, February 27, 2013

Product or Catgeorty List Page With Layered Navigation on Home Page or Any CMS Page Or Custom Module In Magneto

Hi,
if You have to call Product List page or category page with Left Layered Navigation on CMS Page or Custom Module
for Attached text File steps
1. Override Mage_Catalog_Block_Category_View to your local


class Sugarcode_Catalog_Block_Category_View extends Mage_Catalog_Block_Category_View
{
   public function getCurrentCategory()
    {
        if (!$this->hasData('current_category')) {
            $category = Mage::registry('current_category');
            if (!$category)
            {
                //get the root category
                $id = $this->getCategoryId();
                $category = Mage::getModel('catalog/category')->load($id);
            }
            $this->setData('current_category', $category);
        }
        return $this->getData('current_category');
    
    }
}



2. Override Sugarcode_Catalog_Block_Layer_View to your local


class Sugarcode_Catalog_Block_Layer_View extends Mage_Catalog_Block_Layer_View
{
   
 
 protected $categoryId;
 protected $fromHomePage = false;
   
    protected function _construct()
    {
        parent::_construct();

        $this->_initBlocks();
    }

   public function setCategoryId($id)
    {
 
        $category = Mage::getModel('catalog/category')->load($id);
        if ($category->getId()) {
            Mage::getSingleton('catalog/layer')->setCurrentCategory($category);
   $this->setData('current_category', $category);
   $this->categoryId=$id;
   $filterableAttributes =   Mage::getSingleton('catalog/layer')->getFilterableAttributes();
   
   $stateBlock = $this->getLayout()->createBlock($this->_stateBlockName)
            ->setLayer(Mage::getSingleton('catalog/layer'));

        $categoryBlock = $this->getLayout()->createBlock($this->_categoryBlockName)
            ->setLayer(Mage::getSingleton('catalog/layer'))
            ->init();

        $this->setChild('layer_state', $stateBlock);
        $this->setChild('category_filter', $categoryBlock);

        $filterableAttributes = $this->_getFilterableAttributes();
        foreach ($filterableAttributes as $attribute) {
            if ($attribute->getAttributeCode() == 'price') {
                $filterBlockName = $this->_priceFilterBlockName;
            } elseif ($attribute->getBackendType() == 'decimal') {
                $filterBlockName = $this->_decimalFilterBlockName;
            } else {
                $filterBlockName = $this->_attributeFilterBlockName;
            }

            $this->setChild($attribute->getAttributeCode() . '_filter',
                $this->getLayout()->createBlock($filterBlockName)
                    ->setLayer(Mage::getSingleton('catalog/layer'))
                    ->setAttributeModel($attribute)
                    ->init());
        }

        Mage::getSingleton('catalog/layer')->apply();

  
  
        }
 
    }
 
 
    /**
     * Prepare child blocks
     *
     * @return Mage_Catalog_Block_Layer_View
     */
    public function _prepareLayout()
    {
 //parent::_prepareLayout();
  if (!Mage::registry('current_category'))
        {
  
            $this->fromHomePage = true;
            $category = Mage::getModel('catalog/category')
                ->setStoreId(Mage::app()->getStore()->getId())
                ->load($this->categoryId);

            if (!Mage::helper('catalog/category')->canShow($category)) 
            {
                return false;
            }
    
            Mage::getSingleton('catalog/session')->setLastVisitedCategoryId($category->getId());
            Mage::register('current_category', $category); 
    Mage::getSingleton('catalog/layer')->setCurrentCategory($category);
   
        }
        $stateBlock = $this->getLayout()->createBlock($this->_stateBlockName)
            ->setLayer($this->getLayer());

        $categoryBlock = $this->getLayout()->createBlock($this->_categoryBlockName)
            ->setLayer($this->getLayer())
            ->init();

        $this->setChild('layer_state', $stateBlock);
        $this->setChild('category_filter', $categoryBlock);

        $filterableAttributes = $this->_getFilterableAttributes();
        foreach ($filterableAttributes as $attribute) {
            if ($attribute->getAttributeCode() == 'price') {
                $filterBlockName = $this->_priceFilterBlockName;
            } elseif ($attribute->getBackendType() == 'decimal') {
                $filterBlockName = $this->_decimalFilterBlockName;
            } else {
                $filterBlockName = $this->_attributeFilterBlockName;
            }

            $this->setChild($attribute->getAttributeCode() . '_filter',
                $this->getLayout()->createBlock($filterBlockName)
                    ->setLayer($this->getLayer())
                    ->setAttributeModel($attribute)
                    ->init());
        }

        $this->getLayer()->apply();

        return parent::_prepareLayout();
    }
}



3. In CMS design->custom XMl make
Custom Layout:- 2 columns with left bar
XML add below code


<reference name="left">
            <block type="catalog/layer_view" name="catalog.leftnav33" after="-"  template="catalog/layer/view.phtml">
   <action method="setCategoryId"><category_id>3</category_id></action>
   </block>
        </reference>
        <reference name="content">
            <block type="catalog/category_view" name="category.products" template="catalog/category/view.phtml" >
                <block type="catalog/product_list" name="product_list" template="catalog/product/list.phtml">
                    <!-- <action method="addReviewSummaryTemplate"><type>default</type><template>review/helper/su.phtml</template></action> -->
     <action method="setCategoryId"><category_id>3</category_id></action>
                    <block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
                        <block type="page/html_pager" name="product_list_toolbar_pager"/>
                   
                    </block>
                    <action method="addColumnCountLayoutDepend"><layout>empty</layout><count>6</count></action>
                    <action method="addColumnCountLayoutDepend"><layout>one_column</layout><count>5</count></action>
                    <action method="addColumnCountLayoutDepend"><layout>two_columns_left</layout><count>4</count></action>
                    <action method="addColumnCountLayoutDepend"><layout>two_columns_right</layout><count>4</count></action>
                    <action method="addColumnCountLayoutDepend"><layout>three_columns</layout><count>3</count></action>
                    <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
                </block>
            </block>
        </reference>

 
Note :- 3 in XML Set You category Id
For More got to here http://www.magentocommerce.com/boards/viewthread/308574/