我需要计算结帐时特定类型的产品数量。但只有(!)具有特定类型的产品。该类型在下拉属性中定义。
这是一个计算重量并完美运作的代码。 \模板\结帐\ 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;
的产品我发现很多关于收集和过滤的内容,但它似乎不适用于购物车项目。
希望你能帮助我。
答案 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 );
}