0

How to display all the products through custom block module on frontend in magento?

3

I believe that you know basic steps to create the module in magento.

Just follow below instruction carefully.

In your block should look like,

<?php

class NAMESPACE_YOURMODULE_Block_View extends Mage_Catalog_Block_Product_Abstract
{
    protected $_brand;

    protected $_defaultToolbarBlock = 'catalog/product_list_toolbar';

    protected $_brandCollection;

    public function getBrand()
    {
        $brandId = $this->getRequest()->getParam('brand_id', false);
        if (is_null($this->_brand)) {
            if ($brandId) {
                $this->_brand = Mage::getModel('namespace_yourmodule/yourmodule')
                    ->setStoreId(Mage::app()->getStore()->getId())
                    ->load($brandId);
            } else {
                $this->_brand = Mage::getSingleton('namespace_yourmodule/yourmodule');
            }
        }
        return $this->_brand; 
    }

    protected function _getBrandCollection() 
    {
        if (is_null($this->_brandCollection)) {

           $helper = Mage::helper('namespace_yourmodule');

          $brandId = $this->getBrand()->getBrand();

            $this->_brandCollection = Mage::getResourceModel('catalog/product_collection');
            $this->_brandCollection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());

            $this->_brandCollection = $this->_addProductAttributesAndPrices($this->_brandCollection)
            ->addStoreFilter()
            ->addAttributeToFilter($helper->getBrandsAttributeCode(), $brandId);        
        }

        return $this->_brandCollection;
    }

    public function getBrandCollection()
    {
        return $this->_getBrandCollection();
    }

    protected function _prepareLayout()
    {
        $brand = $this->getBrand();
        $helper = Mage::helper('namespace_yourmodule');
        // create breadcrumbs for page
        if ($breadcrumbs = $this->getLayout()->getBlock('breadcrumbs')) {
                $breadcrumbs->addCrumb('home', array('label'=>$helper->__('Home'), 'title'=>$helper->__('Go to Home Page'), 'link'=>Mage::getBaseUrl()));
                $breadcrumbs->addCrumb('brands_list', array('label'=>$helper->__('Brands'), 'title'=>$helper->__('Brands'), 'link'=>Mage::getUrl('brands')));
                $breadcrumbs->addCrumb('brands_view', array('label'=>Mage::getModel('namespace_yourmodule/yourmodule')->getBrandName($brand->getBrand(), Mage::app()->getStore()->getId()), 'title'=>$brand->getIdentifier()));
        }


        return parent::_prepareLayout();
    }


    public function getMode()
    {
        return $this->getChild('toolbar')->getCurrentMode();
    }

    protected function _beforeToHtml()
    {  
        $toolbar = $this->getToolbarBlock();

        $collection = $this->_getBrandCollection();

        if ($orders = $this->getAvailableOrders()) {
            $toolbar->setAvailableOrders($orders);
        }
        if ($sort = $this->getSortBy()) {
            $toolbar->setDefaultOrder($sort);
        }
        if ($dir = $this->getDefaultDirection()) {
            $toolbar->setDefaultDirection($dir);
        }
        if ($modes = $this->getModes()) {
            $toolbar->setModes($modes);
        } 

        $toolbar->setCollection($collection);

        $this->setChild('toolbar', $toolbar);
        Mage::dispatchEvent('catalog_block_product_list_collection', array(
            'collection' => $this->_getBrandCollection()
        )); 

        $this->setProductCollection($collection);

        return parent::_beforeToHtml();
    }

    public function getToolbarBlock()
    {   
        if ($blockName = $this->getToolbarBlockName()) {
            if ($block = $this->getLayout()->getBlock($blockName)) {
                return $block;
            }
        }
        $block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, microtime());
        return $block;
    }

    public function getToolbarHtml()
    {
        return $this->getChildHtml('toolbar');
    }

    public function setCollection($collection)
    {
        $this->_brandCollection = $collection;
        return $this;
    }

}

Your layout xml of custom module looks like,

 <brand_index_view translate="label">

           <reference name="root">
                <action method="setTemplate"><template>page/2columns-left.phtml</template></action>
                <action method="setLayoutCode"><name>two_columns_left</name></action>
            </reference>
            <reference name="content">
                <block type="namespace_brand/view" name="brand_info" template="brand/view.phtml" >
                    <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"/>
                        <!-- The following code shows how to set your own pager increments -->
                        <!--
                            <action method="setDefaultListPerPage"><limit>4</limit></action>
                            <action method="setDefaultGridPerPage"><limit>9</limit></action>
                            <action method="addPagerLimit"><mode>list</mode><limit>2</limit></action>
                            <action method="addPagerLimit"><mode>list</mode><limit>4</limit></action>
                            <action method="addPagerLimit"><mode>list</mode><limit>6</limit></action>
                            <action method="addPagerLimit"><mode>list</mode><limit>8</limit></action>
                            <action method="addPagerLimit" translate="label"><mode>list</mode><limit>all</limit><label>All</label></action>
                        -->
                    </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>
            </reference>
        </brand_index_view>

and your view.phtml file looks like,

<?php echo $this->getToolbarHtml() ?>
<div class="category-products">
    <?php if (($_products = $this->getProductCollection()) && $_collectionSize = $_products->getSize()): ?>

    <?php if($this->getMode()!='grid'): ?>

    <?php $_iterator = 0; ?>
    <ol class="products-list" id="products-list">
        <?php foreach ($_products->getItems() as $_product): ?>
        <li class="item<?php if( ++$_iterator == sizeof($_products->getItems()) ): ?> last<?php endif; ?>">
            <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>">
            <img class="product-image" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(94, 120) ?>" width="94" height="120" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" />
            </a>
            <?php // Product description ?>
            <div class="product-shop">
                <div class="f-fix">
                    <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a></h2>
                     <?php if($_product->getRatingSummary()): ?>
                        <?php echo $this->getReviewsSummaryHtml($_product) ?>
                     <?php endif; ?>
                <?php echo $this->getPriceHtml($_product, true) ?>
                <div class="desc std">
                    <?php echo  $_product->getShortDescription() ?>
                    <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>" class="link-learn"><?php echo $this->__('Learn More') ?></a>
                </div>
                        <?php if($_product->isSaleable()): ?>
                            <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span>Add To Cart</span></span></button>
                        <?php else: ?>
                            <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                        <?php endif; ?>

                    <ul class="add-to-links">
                        <?php if ($this->helper('wishlist')->isAllow()) : ?>
                            <li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
                        <?php endif; ?>
                        <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
                            <li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
                        <?php endif; ?>
                    </ul>
                </div>
            </div>
        </li>
        <?php endforeach; ?>
    </ol>

    <?php else: ?>

    <?php $_columnCount = $this->getColumnCount(); ?>
    <?php $i = 0; foreach ($_products->getItems() as $_product): ?>
    <?php if ($i++%$_columnCount==0): ?>
    <ul class="products-grid first odd">
    <?php endif ?>
        <li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>">
            <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>">
            <img class="product-image" src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(94, 120) ?>" width="94" height="120" alt="<?php echo $this->htmlEscape($_product->getName()) ?>" />
            </a>
            <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"><?php echo $this->htmlEscape($_product->getName()) ?></a></h2>
            <?php if($_product->getRatingSummary()): ?>
            <?php echo $this->getReviewsSummaryHtml($_product, 'short') ?>
            <?php endif; ?>
            <?php echo $this->getPriceHtml($_product, true) ?>
            <div class="actions">
                <?php if($_product->isSaleable()): ?>
                    <button type="button" title="<?php echo $this->__('Add to Cart') ?>" class="button btn-cart" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')"><span><span>Add To Cart</span></span></button>
                <?php else: ?>
                    <p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
                <?php endif; ?>
                <ul class="add-to-links">
                    <?php if ($this->helper('wishlist')->isAllow()) : ?>
                        <li><a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-wishlist"><?php echo $this->__('Add to Wishlist') ?></a></li>
                    <?php endif; ?>
                    <?php if($_compareUrl=$this->getAddToCompareUrl($_product)): ?>
                        <li><span class="separator">|</span> <a href="<?php echo $_compareUrl ?>" class="link-compare"><?php echo $this->__('Add to Compare') ?></a></li>
                    <?php endif; ?>
                </ul>
            </div>
        </li>
    <?php if ($i%$_columnCount==0 || $i==count($_products->getItems())): ?>
    </ul>
    <?php endif ?>
    <?php endforeach ?>
<?php endif; ?>
<?php endif;?>
</div>
<?php echo $this->getToolbarHtml() ?>

You can modify code based on your custom module and requirements. Hope this will sure help you.

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