Как да покажа варианти в падащото меню Ruby on Rails?

Използвам spree 2.0.0 stable в приложението си. На страницата за показване на продукта всички варианти се показват като радио бутони. Просто искам да ги покажа в падащо меню. Някакви мисли по този въпрос?

Благодаря.


person Muhammad Ateq Ejaz    schedule 06.08.2013    source източник


Отговори (4)


Забележка: Това решение прилага 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.)

Надявам се това да работи и за вас.

Благодаря

person Muhammad Ateq Ejaz    schedule 06.08.2013

Изглежда, че маркерът за избор също се нуждае от идентификатор на „variant_id“, в противен случай ще получите грешка 404 при действието за попълване на поръчката.

person Mark Lancaster    schedule 25.08.2014
comment
Имате ли нещо против да добавите кода, който сте използвали, за да работи това. Нов съм в релсите, така че не съм сигурен къде трябва да отиде variant_id. Благодаря - person Dan Mitchell; 08.12.2014

От 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, който ще се запази при актуализациите.

person Dave Kiss    schedule 27.11.2013

ето какво направих за 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] })%>
');
person radamnyc    schedule 10.06.2015