Symfony2为定价混淆制作功能

时间:2015-05-07 08:47:56

标签: php symfony twig

根据我想要购买的相同产品的数量,我需要动态更改购物车中的价格。我坚持这一部分,因为我认为我使整个购物车逻辑有点愚蠢,现在很难得到价格。或者我错了?

所以购物车背后的整个想法是:

我有一个产品实体,其中包含所有产品信息和功能,例如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".我可能没有写这个函数吗?

1 个答案:

答案 0 :(得分:0)

如果您想根据产品的数量获得产品的每个价格,则$ total变量在此处无用。你可能应该这样做:

foreach($cart as $id=>$quantity) {      
        $qtyTotal += $quantity * getItemPrice($id, $items);
    }

其中getItemPrice是一个函数,用$id返回项目的价格。