简体   繁体   English

Magento的。 分层导航未显示

[英]Magento. Layered navigation is not showing

I have CMS page which outputs list of all products. 我有CMS页面,该页面输出所有产品的列表。 It uses block created by custom extension. 它使用由自定义扩展创建的块。

The problem is that it does not output Layered Navigation filters. 问题在于它不输出分层导航过滤器。

Here is CMS page Layout update: 这是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 code: 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 code: 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;
  }
}

I don't see where is my mistake. 我看不出我的错误在哪里。

您尚未在xml文件中调用图层导航。请在CMS页面中查看更多信息,但分层导航无法正常工作

You have called layerd navigation block under <content> tag. 您已在<content>标记下调用了layerd navigation block

Call that block under <reference name="left"> or <reference name="right"> tag. <reference name="left"><reference name="right">标记下调用该块。

I found if statement in catalog/layer/view.phtml left by previous programmer, which disallowed to show layered navigation filters if page has an URL. 我在以前的程序员留下的catalog / layer / view.phtml中找到了if语句,如果页面有URL,则不允许显示分层的导航过滤器。 :/ Sorry :/对不起

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM