2012-12-04 127 views
0

我正在研究一個顯示新控制器和前名稱下的特定產品集合的magento模塊。Magento - 添加分層導航到自定義頁面

其中一些集合變大,所以我想在頁面的一側添加分層導航。 (哎,分頁和排序,而我們在這。)

我可以

 <reference name="left"> 
      <block type="catalog/layer_view" name="catalog.leftnav" template="landing/layer.phtml"/> 
     </reference> 

我得到與適用於整個目錄是分層的導航添加分層導航塊,類別被破壞,並且與頁面上的產品收集無關。

我該如何去配置這個定製產品集合的分層導航(和嘿,分頁和排序)?

回答

1

這裏沒有答案,我改變了方向,從未完成這條發展道路。想到我會發布我學到的東西。

上面的方法是合理的。該工作基本上需要在目錄或編目模塊上重新創建功能。您必須繼承目錄的模型和塊,修改產品集合和當前類別。

這個帖子隱約地朝正確的方向前進,但沒有到達那裏。
http://www.webdesign-gm.co.uk/news/layered-navigation-on-home-page-or-any-cms-page-magento.php 如果您在此方面取得更多進展,請隨時發佈。

+0

提供的URL指向404頁面。你能更新它嗎? – aki

0

我有一個類似的來自客戶端的請求,在一個大菜單下包含特定的可過濾屬性。 使用靜態塊我已經添加了此行無處不在,我需要的屬性的列表爲特定類別

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

,然後在「megamenu定製過濾器,list.phtml」

<?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(正如我在這裏所做的那樣)。儘管我沒有構建一個用於自定義集合的功能,但是我相信,遵循「目錄/圖層」模型並查看集合的加載位置,您可以看到如何覆蓋它並加載自定義集合。