Magento - 将分层导航添加到自定义页面

时间:2012-12-04 12:41:41

标签: magento

我正在开发一个magento模块,它在新的控制器和前端名称下显示特定的产品集合。

这些集合中的一些变大了,所以我想在页面的侧面添加分层导航。 (而且,嘿,分页和排序,而我们在它。)

我可以使用

添加分层导航块
        <reference name="left">
           <block type="catalog/layer_view" name="catalog.leftnav" template="landing/layer.phtml"/>
        </reference>

我得到的是应用于整个目录的分层导航,类别被破坏,并且没有与页面上产品集合的接口。

我如何将分层导航(以及嘿,分页和排序)连接到此自定义产品系列?

2 个答案:

答案 0 :(得分:1)

这里没有答案,我改变了方向,从未完成这条发展道路。想我会发布我学到的东西。

上面的方法是合理的。这项工作基本上需要在目录或catalogsearch模块上重新创建功能。您必须子类化目录的模型和块,修改产品集合和当前类别。

这篇文章模糊地指向了正确的方向,但没有到达那里 http://www.webdesign-gm.co.uk/news/layered-navigation-on-home-page-or-any-cms-page-magento.php 如果你在这方面取得更多进展,请随时发布。

答案 1 :(得分:0)

我有一个类似的请求,要求客户在大型菜单下包含特定的可过滤属性。 使用静态块我已将此行添加到任何地方我需要特定类别的属性列表

{{block type="core/template" attribute_code="age_specific" category_id="12"  template="megamenu-custom-filter-list.phtml"}}

然后&#34; megamenu-custom-filter-list.phtml&#34;

<?php if($this->getCategoryId() && is_numeric($this->getCategoryId()) && $this->getAttributeCode()): ?>
 <?php
  $visible_items = 12;
  $category = Mage::getModel('catalog/category')->load($this->getCategoryId());
  $attrCode = $this->getAttributeCode();
  unset($layer);
  $layer = Mage::getModel("catalog/layer");
  $layer->setCurrentCategory($category);
  $attributes = $layer->getFilterableAttributes();
  foreach ($attributes as $attribute):
    if($attribute->getAttributeCode() != $attrCode){
      continue;
    }
    if ($attribute->getAttributeCode() == 'price') {
      $filterBlockName = 'catalog/layer_filter_price';
    } elseif ($attribute->getBackendType() == 'decimal') {
      $filterBlockName = 'catalog/layer_filter_decimal';
    } else {
      $filterBlockName = 'catalog/layer_filter_attribute';
    }
    $result = Mage::app()->getLayout()->createBlock($filterBlockName)->setLayer($layer)->setAttributeModel($attribute)->init();
 ?>
    <div>
      <h4 class="menu-block-title"><?php echo $this->__($attribute->getFrontendLabel()) ?></h4>
      <ul class="menu-attr-list">
        <?php $counting = 1; ?>
        <?php foreach($result->getItems() as $option): ?>
          <?php $optionUrl = $category->getUrl() . "?" . $attribute->getAttributeCode() . "=" . $option->getValue(); ?>
          <?php if(!$option->getCount()){ continue; } ?>
          <li class="<?php echo ($counting >= $visible_items+1)?"visible-on-showmore":"" ?>" style="list-style: none;">
            <a class="cube" href="<?php echo $optionUrl ?>">
              <?php echo $option->getLabel() ?> <?php /* (<?php echo $option->getCount() ?>) */ ?>
            </a>
          </li>
          <?php $counting++; ?>
        <?php endforeach; ?>
        <?php if($counting >= $visible_items+1): ?>
          <li class="show-more-menuitem">
            <a href="javascript:void(0)" onclick="showMoreMenuItems(this); return false;" class="">
              <?php echo $this->__('Visa fler') ?>
            </a>
          </li>
        <?php endif; ?>
      </ul>
    </div>
 <?php endoreach; ?>
<?php endif; ?>

当然,这可以扩展为允许显示所有属性,而不是将它们限制为12(就像我在这里所做的那样)。虽然,我没有构建一个功能来显示这个自定义集合,但我相信遵循&#34;目录/层&#34;模型并查看集合的加载位置,您可以看到如何覆盖它并加载您自己的自定义集合。