Използвам spree 2.0.0 stable в приложението си. На страницата за показване на продукта всички варианти се показват като радио бутони. Просто искам да ги покажа в падащо меню. Някакви мисли по този въпрос?
Благодаря.
Използвам spree 2.0.0 stable в приложението си. На страницата за показване на продукта всички варианти се показват като радио бутони. Просто искам да ги покажа в падащо меню. Някакви мисли по този въпрос?
Благодаря.
Забележка: Това решение прилага Spree "Метод за заместване на шаблон", особено когато имате обширни промени в дизайна на вашето приложение или използвате персонализиран дизайн. Виж тук
http://guides.spreecommerce.com/developer/view.html
В противен случай използвайте метода "deface", ако използвате дизайна по подразбиране на магазина Spree или незначителни промени.
Go to:
app/views/spree/products/_cart.html.erb. и написа следния ред във вътрешния формуляр за количка.
<%= 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.)
Надявам се това да работи и за вас.
Благодаря
Изглежда, че маркерът за избор също се нуждае от идентификатор на „variant_id“, в противен случай ще получите грешка 404 при действието за попълване на поръчката.
От Spree 2.2.0.beta (и вероятно по-рано), трябва да използвате включения Deface gem, за да направите тази модификация, вместо директно да редактирате основните файлове.
За да замените съдържанието на кода, намиращ се във файла за изглед на интерфейса spree app/views/spree/products/_cart_form.html.erb
(забележете, че името е променено след Spree v2.0):
Създайте папка в app/overrides/spree/products/_cart_form/
и добавете .deface
файл с име по ваш избор, напр. variant_dropdown.html.erb.deface
В този случай, тъй като заместващият код съдържа динамичен ruby код, .erb
е необходим.
След това в съдържанието на този файл изберете кода, който се опитвате да редактирате извън ядрото, и го заменете със свой персонализиран код. Ето как изглежда моят .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] })%>
Смисълът на това е, че всички бъдещи актуализации на Spree иначе ще презапишат вашия код или ще изискват от вас ръчно да пренаписвате кода си всеки път. Това се опитва да защити промените ви в бъдеще, като се захване към селектора data
, който ще се запази при актуализациите.
ето какво направих за Spree 3.0. това беше поставено във файл \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] })%>
');