2013-08-06 8 views

risposta

8

Nota: questa soluzione implementa il "metodo di sostituzione del modello" di Spree, in particolare quando si ha un ampio cambiamento di progettazione nella progettazione dell'applicazione o si utilizza il progetto personalizzato. Vedi qui

http://guides.spreecommerce.com/developer/view.html

altrimenti utilizzare il metodo "deturpare" se u si utilizza il design di default del negozio Sprea o di piccole modifiche.

Vai a:

app/views/Spree/prodotti/_cart.html.erb. e ha scritto la seguente riga nel modulo cart interno.

<%= select_tag "products[#{@product.id}]",  options_for_select(@product.variants_and_option_values(current_currency).collect{|v| ["#{variant_options(v)} #{variant_price(v)}", v.id]})%> 

#(if you don't have this file(app/views/spree/products/_cart_form.html.erb) go to github spree2.0.0 branch and use it in your product.) 

Spero che questo funzioni anche per te.

Grazie

1

Come di Spree 2.2.0.beta (e probabilmente prima), si dovrebbe utilizzare la gemma Deface incluso per essere fare questa modifica, invece di modificare direttamente i file core.

Per sostituire il contenuto del codice che si trova nel file vista baldoria frontend app/views/spree/products/_cart_form.html.erb (notare il nome è cambiato da Spree v2.0):

Creare una cartella a app/overrides/spree/products/_cart_form/ e aggiungere un file .deface con il nome di la tua scelta es. variant_dropdown.html.erb.deface In questo caso, poiché il codice sostitutivo contiene codice ruby ​​dinamico, è necessario lo .erb.

Quindi, nel contenuto di questo file, selezionare il codice che si sta tentando di modificare dal core e sostituirlo con il proprio codice personalizzato. Ecco come si presenta il mio file .deface.

<!-- replace_contents "[data-hook='inside_product_cart_form'] #product-variants, #inside-product-cart-form[data-hook] #product-variants" --> 

<h6 class="product-section-title"><%= Spree.t(:licenses) %></h6> 
<%= select_tag "products[#{@product.id}]", 
    options_for_select(@product.variants_and_option_values(current_currency).collect{ |v| ["#{variant_options(v)} #{variant_price(v)}", v.id] })%> 

Il punto di questo è che i futuri aggiornamenti di Spree altrimenti sovrascrivere il codice o richiedono di riscrivere manualmente il codice ogni volta. Ciò tenta di rendere future le tue modifiche agganciandole al selettore data che persisterà sugli aggiornamenti.

+0

Si tratta di un esempio funzionante? Sto ottenendo l'errore 404 come indicato di seguito ... –

2

Anche il tag select necessita di un ID di "variant_id", altrimenti si otterrà un errore 404 sull'azione populate.

+1

Ti dispiacerebbe aggiungere il codice che hai usato per farlo funzionare. Sono nuovo alle rotaie quindi non sono sicuro di dove deve andare la variant_id. Grazie –

0

ecco cosa ho fatto per spree 3.0. questo è stato inserito in un file \ app \ overrides \ use_drop_down_for_variants.rb

Deface::Override.new(:virtual_path => 'spree/products/_cart_form', 
        :name => 'use_drop_down_for_product_variants', 
        :replace_contents => '[id="product-variants"]', 
        :text => ' 
            <h3 class="product-section-title"><%= Spree.t(:variants) %></h3> 
           <%= select_tag "variant_id", 
    options_for_select(@product.variants_and_option_values(current_currency).collect{ |v| ["#{variant_options(v)} #{variant_price(v)}", v.id] })%> 
');