2015-04-24 22 views
6

Non è davvero possibile fare semplici calcoli in twig o mi manca qualcosa? Se visualizzo elementi con un ciclo e voglio sommare i prezzi degli articoli, cosa posso fare?Symfony2 conteggio nel modello di ramoscello

{% for item in product %} 
        <tr> 

         <td> <img width="60" src="{{ asset('bundles/mpFrontend/assets/products/4.jpg') }}" alt=""/></td> 

         <td>{{ item.model }}</td> 
         <td> 
         <div class="input-append"><input class="span1" style="max-width:34px" placeholder="1" id="appendedInputButtons" size="16" type="text"> 
         <button class="btn" type="button"><i class="icon-minus"></i></button> 
         <button class="btn" type="button"><i class="icon-plus"></i></button> 
         <button class="btn btn-danger" type="button"><a href="{{ path('cart_remove', {'id': key}) }}"><i class="icon-remove icon-white"></i></button> 
         </div> 
         </td> 

         <td>{{ item.price }}</td> 
         <td>{{ item.discount }}</td> 
         <td>{{ item.value }}</td> 
         <td>{{ item.pc }}</td> 
        </tr> 

       <tr> 
        <td colspan="6" align="right">Total Price: </td> 
        <td>{{ item.price|something }}</td> /// count here 
       </tr> 

        {% endfor %} 

UPDATE

La mia classe di estensione:

<?php 
// src/Mp/ShopBundle/Twig/AppExtension.php 
namespace Mp\ShopBundle\Twig; 

class AppExtension extends \Twig_Extension 
{ 
    public function getFunctions() 
    { 
     return array(
      'getTotalPrice' => new \Twig_Function_Method($this, 'getTotalPrice')); 
    } 

    public function getTotalPrice(Items $items) 
    { 
     $total = 0; 
     foreach($items as $item){ 
      $total += $item->getPrice(); 
     } 
     return $total; 
    } 

    public function getName() 
    { 
     return 'app_extension'; 
    } 
} 

Servizio:

services: 
    app.twig_extension: 
     class: Mp\ShopBundle\Twig\AppExtension 
     public: false 
     tags: 
      - { name: twig.extension } 

Quando uso {{getTotalPrice (prodotto)}} sto ottenendo un errore a quella linea:

Un'eccezione è stata generata durante il rendering di un modello ("Errore irreversibile di Catchable: l'argomento 1 passato a Mp \ ShopBundle \ Twig \ AppExtension :: getTotalPrice() deve essere un'istanza di Mp \ ShopBundle \ Twig \ Items, nessuna data , chiamato C: \ wamp \ www \ Digidis \ tree \ app \ cache \ dev \ twig \ b4 \ 5d \ b2cbf04f86aeef591812f9721d41a678d3fc5dbbd3aae638883d71c26af0.php sulla riga 177 e definito ") in MpShopBundle: Frontend: product_summary.html.twig alla riga 94.

+0

I suggerisci di usare javascript o jquery per contare –

+0

Quindi non puoi davvero fare matematica semplice con il ramoscello? Per riassumere devi scrivere javascript? L'uomo è un fiasco. – Dominykas55

risposta

3

frammento di breve per fare una somma in Twig:

{% set total = 0 %} 
{% for product in products %} 
    {% set total = total + product.getPrice() %} 
{% endfor %} 
Total: {{ total }}EUR 
0

Dominykas55,

Anche t Per quanto tu possa fare il calcolo in Twig, non è il suo ruolo al primo posto. Fallo dal tuo Controller o da un Servizio, oppure usa una funzione Twig.

Tuttavia, se è necessario Twig per voi, che dire di questo:

{% set total = 0 %} 
{% for item in product %} 
    {% set total = total + total.price %} 
{% endfor %} 
{{ total }} 

Ogni iterazione saprebbe circa del totale, e potrebbe facilmente visualizzarlo.

0

È sempre possibile scrivere il proprio metodo per esso. Date un'occhiata alla documentazione:

http://symfony.com/doc/current/cookbook/templating/twig_extension.html

Tutto ciò che serve è un metodo semplice come questo:

class AppExtension extends \Twig_Extension 
{ 
    /** 
    * Returns a list of functions to add to the existing list. 
    * 
    * @return array An array of functions 
    */ 
    public function getFunctions() 
    { 
     return array(
      'getTotalPrice' => new \Twig_Function_Method($this, 'getTotalPrice')); 
    } 

    public function getTotalPrice(Items $items) 
    { 
     $total = 0; 
     foreach($items as $item){ 
      $total += $item->getPrice(); 
     } 
     return $total; 
    } 

    public function getName() 
    { 
     return 'app_extension'; 
    } 
} 

e poi utilizzarlo nel modello come thsi:

{{ getTotalPrice(product) }} 
+0

Puoi spiegarmi perché è necessaria la parte getName? – Dominykas55

+0

Non sono sicuro di cosa lo stia usando Twig ma dal momento che fa parte dell'interfaccia 'Twig_ExtensionInterface' devi implementare questo metodo. Per quanto posso dire, è usato per formattare messaggi di eccezione e profiler. –

+0

Ok, ho fatto tutto con il tuo esempio e ho aggiunto il servizio in services.yml come nella documentazione, tuttavia sto ottenendo un errore che getTotalPrice non esiste? – Dominykas55

Problemi correlati