首页 文章

使用简单可配置的Magento分层导航过滤器

提问于
浏览
7

我有一个可配置的产品,其中包含与之相关的简单产品 . 防爆 . 鞋子的属性大小和宽度简单 .

  • 当我按宽度和大小进行过滤时,即使具有该大小和宽度的简单产品不存在,它也会显示可配置 .

我在此之前已经看到过这种问题,有许多形式没有解决方案 . 有谁知道如何修复此功能?我很惊讶这不是开箱即用的 .

https://magento.stackexchange.com/questions/18001/shop-by-layered-navigation-configurable-products-not-filtering-correctly

Magento - Layered navigation, configurable products, multiple filters active issue

1 回答

  • -1

    您必须通过在core / Mage目录中复制核心文件来自定义核心文件 .

    假设您必须改变尺寸和颜色 .

    打开文件 app\code\core\Mage\Catalog\Model\Layer.php

    在以下代码之后: -

    $collection
      ->addAttributeToSelect(
        Mage::getSingleton('catalog/config')->getProductAttributes()
      )
      ->addMinimalPrice()
      ->addFinalPrice()
      ->addTaxPercents()
      ->addUrlRewrite($this->getCurrentCategory()->getId());
    

    您必须为所选属性自定义它: -

    例如 :-

    if(isset($_GET['size']))
        {
            $query = 'SELECT value FROM aw_layerednavigation_filter_option_eav WHERE name="title" AND option_id IN ( '.$_GET['size'].' )';
            $results = $readConnection->fetchAll($query);
            $sizeLabels = array();
            foreach($results as $_r){
                $size_labels[] = $_r['value'];
            }
    
            $query = 'SELECT parent_id FROM advance_filter WHERE size IN ( '.implode(",",$size_labels).' ) AND qty > 0';
    
            $results = $readConnection->fetchAll($query);
            foreach($results as $_r){
                $size_prod_Ids[] = $_r['parent_id'];
            }   
        }
        $color_prod_Ids = array();
        if(isset($_GET['color']))
        {
            $query = 'SELECT value FROM aw_layerednavigation_filter_option_eav WHERE name="title" AND option_id IN ( '.$_GET['color'].' )';
            $results = $readConnection->fetchAll($query);
            $color_labels = array();
            foreach($results as $_r){
                $color_labels[] = strtoupper($_r['value']);
            }
    
            $query = 'SELECT parent_id FROM advance_filter WHERE color IN ( "'.implode(",",$color_labels).'" ) AND qty > 0';
    
            $results = $readConnection->fetchAll($query);
            foreach($results as $_r){
                $color_prod_Ids[] = $_r['parent_id'];
            }
        }
        $productIds = array_merge($size_prod_Ids,$color_prod_Ids);
        if(count($productIds) > 0){
            $collection->addAttributeToFilter('entity_id', array('in' => array_unique($productIds)));
        }
    

    希望这会有所帮助.. !!

相关问题