Magento Checkout计算与属性匹配的产品重量

时间:2015-03-15 12:58:39

标签: magento count checkout

我需要计算结帐时特定类型的产品数量。但只有(!)具有特定类型的产品。该类型在下拉属性中定义。

这是一个计算重量并完美运作的代码。 \模板\结帐\ cart.phtml

<?php $items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();
$weight = 0;
foreach($items as $item) {
    $weight += ($item->getWeight() * $item->getQty()) ;
}
echo $weight;
?>

但是如何仅计算具有特定属性值的产品?

像 =&GT; &#34;仅计算具有属性颜色=绿色&#34;

的产品

我发现很多关于收集和过滤的内容,但它似乎不适用于购物车项目。

希望你能帮助我。

2 个答案:

答案 0 :(得分:1)

这是获取属性值的方法(加载产品后):

 $product = $item->getProduct();
 $value = $product->getAttributeText($yourAttributeCode);

但请注意,为了工作,您需要设置:&#39;在产品列表中显示&#39;用于产品列表&#39; < / em>在管理面板的属性编辑器中为yes。


对于分组部分,一种可能的方法是做这样的事情(只有当你的特定属性有少量值时才有意义):

$weights = array ('redWeight' => 0, 'blueWeight' => 0, 'yellowWeight' => 0, ..);
$groupRed = array();
$groupGreen = array();
 ...

foreach($items as $item) {
  $product = $item->getProduct();
  $value = $product->getAttributeText('yourAttributeCode');
  $weight = ($item->getWeight() * $item->getQty());
  if($value){ //Do all products have this attribute?
    Switch($value){
       case "red":
           $Weights['redWeight'] += $weight;
           $groupRed[] = $item;
           break;
       case "green":  
          ....
     }
  } else {
    continue;
   } 
}
 ....
  HERE YOU HAVE GROUPS OF YOUR ITEMS ACCORDING TO THEIR SPECIFIC ATTRIBUTE VALUES

答案 1 :(得分:1)

您必须在循环(昂贵)时加载产品型号,然后您就可以像这样调用属性:

foreach( $oItems as $oItem )
{
    $oProduct = $oItem->getProduct();
    $oProductModel = Mage::getModel( 'catalog/product' )->load( $oProduct->getId() );
    // For code...
    $sColor   = $oProductModel->getData( 'color' );
    var_dump( $sColor );
    // For text...
    $sFormat  = $oProductModel->getAttributeText( 'color' );
    var_dump( $sFormat );
}