我有CMS页面,它输出所有产品的列表。它使用自定义扩展创建的块。
问题是它不输出分层导航过滤器。
这是CMS页面布局更新:
<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 代码:
<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 代码:
<?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;
}
}
我不知道我的错误在哪里。
答案 0 :(得分:0)
您没有在xml文件中调用图层导航。请查看更多信息 CMS page with layered navigation not working
答案 1 :(得分:0)
您已在layerd navigation block
代码下致电<content>
。
在<reference name="left">
或<reference name="right">
标记下调用该块。
答案 2 :(得分:0)
我在之前的程序员留下的 catalog / layer / view.phtml 中找到 if 语句,如果页面有网址,则不允许显示分层导航过滤器。 :/抱歉