I have CMS page which outputs list of all products. It uses block created by custom extension.
The problem is that it does not output Layered Navigation filters.
Here is CMS page Layout update:
<reference name="content">
<block type="wtc_allproducts/list" name="allproducts" template="wtc/allproducts/list.phtml">
<!-- Layered Navigation Block; setCategoryId sets id of Root category -->
<block type="catalog/layer_view" name="catalog.leftnav" template="catalog/layer/view.phtml" >
<action method="setCategoryId"><category_id>2</category_id></action>
</block>
<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="setToolbarBlockName"><name>product_list_toolbar</name></action>
</block>
</reference>
wtc/allproducts/list.phtml code:
<div class="row">
<div class="col-xs-12">
<div class="infoblock">
<?php echo $this->getChildHtml('catalog.leftnav'); ?>
</div>
</div>
</div>
<?php if (($_products = $this->getProductCollection()) && $_collectionSize = $_products->getSize()): ?>
<div class="row">
<div class="col-xs-12">
<div class="category-products">
<div class="row">
<?php echo $this->getToolbarHtml() ?>
<?php foreach ($_products->getItems() as $_product): ?>
<div class="col-xs-3">
<div class="brand product-item">
<a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(180); ?>" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a>
<p><?php echo $this->htmlEscape($_product->getName()) ?></p>
<div class="price"><?php echo $this->getPriceHtml($_product, true) ?></div>
<?php if($_product->isSaleable()): ?>
<input type="image" class="button btn-cart" src="<?php echo $this->getSkinUrl('images/assets/addtocart.png'); ?>" style="height: 34px;" alt="<?php echo $this->__('Add to Cart') ?>" onclick="setLocation('<?php echo $this->getAddToCartUrl($_product) ?>')">
<?php else: ?>
<p class="availability out-of-stock"><span><?php echo $this->__('Out of stock') ?></span></p>
<?php endif; ?>
</div><!-- /.brand.product-item -->
</div><!-- /.col-xs-3 -->
<?php endforeach ?>
</div><!-- /.row -->
<div class="toolbar-bottom">
<?php echo $this->getToolbarHtml() ?>
</div><!-- /.toolbar-bottom -->
</div><!-- /.category-products -->
</div></div>
<?php endif; ?>
WTC/AllProducts/Block/List.php code:
<?php
class WTC_AllProducts_Block_List extends Mage_Catalog_Block_Product_Abstract
{
protected $_defaultToolbarBlock = 'catalog/product_list_toolbar';
protected $_allProductsCollection;
protected function _getAllProductsCollection()
{
if (is_null($this->_allProductsCollection)) {
$layer = Mage::getSingleton('catalog/layer');
$this->_allProductsCollection = $layer->getProductCollection();
$this->getToolbarBlock()->removeOrderFromAvailableOrders('position');
$this->getToolbarBlock()->removeOrderFromAvailableOrders('aitmanufacturers_sort');
$this->_allProductsCollection->setPage(
$this->getToolbarBlock()->getCurrentPage(),
$this->getToolbarBlock()->getLimit()
);
}
return $this->_allProductsCollection;
}
public function getAllProductsCollection()
{
return $this->_getAllProductsCollection();
}
public function getMode()
{
return $this->getChild('toolbar')->getCurrentMode();
}
protected function _beforeToHtml()
{
$toolbar = $this->getToolbarBlock();
// called prepare sortable parameters
$collection = $this->_getAllProductsCollection();
// use sortable parameters
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);
}
// set collection to toolbar and apply sort
$toolbar->setCollection($collection);
$this->setChild('toolbar', $toolbar);
Mage::dispatchEvent('catalog_block_product_list_collection', array(
'collection' => $this->_getAllProductsCollection()
));
$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->_allProductsCollection = $collection;
return $this;
}
}
I don't see where is my mistake.