Spree, как отображать варианты в раскрывающемся списке Ruby on Rails?

Я использую стабильную версию spree 2.0.0 в своем приложении. На странице отображения продукта все варианты отображаются в виде переключателей. Я просто хочу показать их в раскрывающемся списке. Есть мысли по этому поводу?

Спасибо.


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

Похоже, что для тега select также требуется идентификатор «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 для внесения этой модификации вместо непосредственного редактирования файлов ядра.

Чтобы заменить содержимое кода, расположенного в файле внешнего интерфейса 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

вот что я сделал для веселья 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