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

Dav*_*vid 7 magento

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

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

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

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

Magento - 分层导航,可配置产品,多个过滤器活动问题

Rak*_*har -1

您必须通过将核心文件复制到 local/Mage 目录来自定义核心文件。

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

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

添加以下代码后:-

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

您必须针对所选属性对其进行自定义:-

例如 :-

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)));
    }
Run Code Online (Sandbox Code Playgroud)

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