1

我有输出所有产品列表的 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;
  }
}

我不明白我的错误在哪里。

4

3 回答 3

0

您没有在 xml 文件中调用图层导航。请在 分层导航不起作用的 CMS 页面中查看更多信息

于 2014-04-11T10:24:07.623 回答
0

layerd navigation block您已在<content>标签下调用。

<reference name="left">在或<reference name="right">标记下调用该块。

于 2014-04-11T11:10:10.300 回答
0

我在以前的程序员留下的catalog/layer/view.phtml中发现了if语句,如果页面有 URL,则不允许显示分层导航过滤器。:/ 对不起

于 2014-04-13T17:55:11.120 回答