获取具有产品的属性的色板数

问题描述:

我拥有带色板属性的可配置产品,在本例中为颜色。获取具有产品的属性的色板数

我需要知道有多少种颜色(数字)有产品,或者有多少单个产品构成此可配置产品。

事实上,我需要知道产品中何时有多种颜色。

最后我发现它,也许它会帮助别人的未来:

$productAttributeOptions = $_product->getTypeInstance(true)->getConfigurableAttributesAsArray($_product); 

//in this case the attribute color that I needed is in [0] position 
$available_colors = sizeof($productAttributeOptions[0]["values"]); 

if ($available_colors >1): 
    //custom code 
endif; 

编辑:该解决方案适用于一个产品,或者至少几个产品,但如果你需要它在每个产品中运行该代码真的很慢的产品列表。有时它驱动到超时并关闭数据库连接,所以Web崩溃时出现错误。

最后,我得到了一个解决方案,也许它不是最好的,但它是相当快比我之前使用的一个:

$_idsForTheQuery = $_productCollection->getAllIds(); 

    $read = Mage::getSingleton('core/resource')->getConnection('core_read'); 
    $sql_query = "SELECT parent_id, COUNT(parent_id) AS colors FROM 
       (SELECT cpr.parent_id FROM `eav_attribute` a 
       LEFT JOIN `catalog_product_entity_int` cpei ON cpei.attribute_id=a.attribute_id 
       LEFT JOIN `catalog_product_relation` cpr ON cpr.child_id=cpei.entity_id 
       WHERE attribute_code = 'color' AND cpr.parent_id IN (".implode (", ", $_idsForTheQuery).") 
       GROUP BY cpr.parent_id, cpei.value) colors 
       GROUP BY parent_id"; 

    $results = $read->query($sql_query); 

    $number_of_colors_by_id_array = array(); 
    foreach($results as $r) 
    { 
     $number_of_colors_by_id_array[$r["parent_id"]] = $r["colors"]; 
    } 

,然后在产品的foreach循环

<?php if ($number_of_colors_by_id_array[$_product->getId()]>1): ?> 
    <div class="aditional-colors-message"> 
     <?php echo __('more colors available'); ?>   
    </div> 
<?php endif; ?>