根据我想要购买的相同产品的数量,我需要动态更改购物车中的价格。我坚持这一部分,因为我认为我使整个购物车逻辑有点愚蠢,现在很难得到价格。或者我错了?
所以购物车背后的整个想法是:
我有一个产品实体,其中包含所有产品信息和功能,例如getPrice,getDiscount等。当我将产品添加到购物车时,我创建了一个新的数组$ cart,但我只保存了productsId那里,productsId有一个值(产品数量),就是这样。这就是我的意思:
if($session->has('cart') && count($session->get('cart')) > 0 ) {
$em = $this->getDoctrine()->getEntityManager();
foreach( $cart as $id => $quantity ) {
$productIds[] = $id;
}
if( isset( $productIds ) )
{
$em = $this->getDoctrine()->getEntityManager();
$product = $em->getRepository('MpShopBundle:Product')->findById( $productIds );
} else {
return $this->render('MpShopBundle:Frontend:product_summary.html.twig', array(
'empty' => true,
));
}
return $this->render('MpShopBundle:Frontend:product_summary.html.twig', array(
'product' => $product,
));
} else {
return $this->render('MpShopBundle:Frontend:product_summary.html.twig', array(
'empty' => true,
));
}
}
现在,当我想根据productsId显示购物车中的商品时,我只需这样做:
{% if product is defined %}
{% if cart is defined %}
{% for info in product %}
<tr>
<td> <img width="60" src="{{ asset('bundles/mpFrontend/assets/products/6.jpg') }}" alt=""/></td>
<td>{{ info.model }}</td>
<td>
{% for key, item in cart %}
{% if key == info.id %}
<div class="input-append">
<input class="span1" style="max-width:34px" placeholder="{{ key }}" value="{{ item }}" id="appendedInputButtons" size="16" type="text" data-id="{{ key }}"/>
<a href="javascript:void(0)" class="remove btn"><i class="icon-minus"></i></a>
<a href="javascript:void(0)" class="add btn"><i class="icon-plus"></i></a>
{% endif %}
{% endfor %}
{% for key in cart|keys %}
{% if key == info.id %}
<button class="btn btn-danger" type="button"><a href="{{ path('cart_remove', {'id': key}) }}"><i class="icon-remove icon-white"></i></button>
{% endif %}
{% endfor %}
</div>
</td>
<td>{{ info.price }}</td>
<td>{{ info.discount }}</td>
<td>{{ info.value }}</td>
<td>{{ info.getFinal|number_format(2, '.', ',') }}</td>
</tr>
{% endfor %}
<tr>
<td colspan="6" align="right">Total Price: </td>
<td> ${{getTotalPrice(product)|number_format(2, '.', ',')}}</td>
</tr>
<tr>
<td colspan="6" align="right">Total Discount: </td>
<td> ${{getTotalDiscount(product)|number_format(2, '.', ',')}}</td>
</tr>
<tr>
<td colspan="6" align="right">Total Tax: </td>
<td> ${{getTotalTax(product)|number_format(2, '.', ',')}}</td>
</tr>
<tr>
<td colspan="6" align="right"><strong>TOTAL</strong> </td>
<td class="label label-important"> <strong> ${{getTotalCart(product)|number_format(2, '.', ',')}} </strong></td>
</tr>
</tbody>
</table>
{% endif %}
{% endif %}
正如你所看到的那样,有很多东西也让我烦恼。但问题就像我想要显示价格一样:
我可以使用info.price
等方式轻松显示单个价格。但这仅显示同一类型产品中的1个时的价格。我得到了所有产品的全价,还有这样的枝条延伸:
public function getTotalCart($items)
{
$total = 0;
foreach($items as $item){
$total += $item->getFinal();
}
return $total;
}
但就像我说的那样,它只适用于产品数量为1的情况。 所以我的问题是:我如何创建一个函数,从产品实体获取价格和$ cart数组中的数量,然后将其全部加起来?这甚至可能吗?或者也许有办法将所有产品信息保存在$ cart中然后访问它?我不知道..
我知道我可以像{{ info.price * item }}
那样制作,但我希望将价格保存在某个地方而不仅仅是显示它。
这是我到现在想出来的:
public function getTotalCart($items, $cart)
{
$qtyTotal = 0;
foreach($cart as $id=>$quantity) {
$qtyTotal += $quantity * getItemPrice($id, $items);
}
return $qtyTotal;
}
public function getItemPrice($id, $items){
return $this->getFinal();
}
我收到错误:Attempted to call function "getItemPrice" from namespace "Mp\ShopBundle\twig".
我可能没有写这个函数吗?
答案 0 :(得分:0)
如果您想根据产品的数量获得产品的每个价格,则$ total变量在此处无用。你可能应该这样做:
foreach($cart as $id=>$quantity) {
$qtyTotal += $quantity * getItemPrice($id, $items);
}
其中getItemPrice是一个函数,用$id
返回项目的价格。