minishop2 и опции товара.

Здравствуйте!
Помогите разобраться пожалуйста, почему так.
Создаю например футболку, у ней несколько размеров — M, L, XL.
Если добавляю товар в корзину не выбирая размер, то размер в корзине не выводится.
Если выберу M(хотя этот размер стоит первым по умолчанию), то тогда уже размер выводится.
Получается, что если человек не будет выбирать размер(то есть его устроит тот, который стоит первым) то в корзине он не видит его. Как быть?
shiyankin
07 марта 2015, 22:42
6
5 126
0

Комментарии: 27

Сергей Фещуков
09 марта 2015, 19:52
0
Дописать к input атрибут required и тогда браузер сам не даст завершить submit. То есть должно быть что-то типа:
<input type="radio" name="options[size]" value="M" required />
Но работает такое только в современных браузерах. Это самый простой и неправильный вариант.

Второй вариант, писать обработчик miniShop2.Callbacks.Cart.add.before, к примеру:
miniShop2.Callbacks.Cart.add.before = function () {
if ( $('input[name="options[size]"]:checked').val() === undefined ) {
alert('Выберите размер!');
return false;
}
}
return false; прерывает отправку запроса на добавление товара в корзину.

Третий вариант, задать вариант по-умолчанию. То есть первый вариант сделать checked сразу при загрузке страницы. Либо добавив checked=«checked», либо применив javascript.
    shiyankin
    10 марта 2015, 12:37
    0
    Спасибо, но в tpl.msProducts.row
    <form method="post" class="ms2_form">
    		
    			<h3><a href="[[~[[+id]]]]">[[+pagetitle]]</a></h3>
    			<span class="flags">[[+new]] [[+popular]] [[+favorite]]</span>
    			<span class="price">[[+price]] ₽  [[+old_price]]</span>
    			
    			<button class="btn btn-default" type="submit" name="ms2_action" value="cart/add"><i class="glyphicon glyphicon-barcode"></i> [[%ms2_frontend_add_to_cart]]</button>
    			<input type="hidden" name="id" value="[[+id]]">
    			<input type="hidden" name="count" value="1">
    			<input type="hidden" name="options" value="[]">
    		</form>
    есть , может быть туда надо вписать опции как-то?
    shiyankin
    10 марта 2015, 12:47
    0
    То есть в карточке товара все прекрасно добавляется и отображается. Но вот когда добавляю товар в корзину через каталог, то опции не показываются.
      Сергей Фещуков
      10 марта 2015, 12:56
      0
      Вместо
      <input type="hidden" name="options" value="[]">
      добавить
      <input type="hidden" name="options[size]" value="M">
      Но вообще это неправильно, потому что покупатель не понимает, какой размер ему добавляется в корзину. Поэтому лучше вызвать
      [[!msOptions? &product=`[[+id]]` &name=`size`]]
      в этом чанке, тогда появится выбор размера прямо в каталоге.
Андрей
14 октября 2016, 15:08
0
Автор темы, а можешь написать как опции у товара завести и как вывести в шаблоне?
Мне нужно что бы в товаре можно выбрать нужный размер, т.е. через input radio
И что бы выбранная опции отображалась в корзине.
    Андрей
    14 октября 2016, 15:46
    0
    Автор темы, а можешь написать как опции у товара завести и как вывести в шаблоне?
    Мне нужно что бы в товаре можно выбрать нужный размер, т.е. через input radio
    И что бы выбранная опции отображалась в корзине.

    Всё это есть в документации.
      Андрей
      14 октября 2016, 15:48
      0
      ссылкой поделитесь?
        Андрей
        14 октября 2016, 15:54
        0
        Эмм, вверху же раздел Docs. https://docs.modx.pro/components/minishop2/
          Андрей
          14 октября 2016, 16:25
          0
          Создал опцию в магазине. Задал ее в категории.
          В товаре появилась yadi.sk/i/RHADwZhkwqYQN
          В шаблоне вывожу вот так [[+mysize]]. Но не выводится… Что не так?
            Андрей
            14 октября 2016, 16:40
            0
            Там же есть всё в доках:

            https://docs.modx.pro/components/minishop2/snippets/msproductoptions

            [[msProductOptions? &onlyOptions=`mysize`]]

            И смысл делать размер своим параметром, если он уже по умолчанию есть? Только вывод там сниппетом msOptions:

            [[msOptions? &options=`color,size`]]
              Андрей
              14 октября 2016, 16:54
              0
              Спасибо!
              Может где то не так выразился, но нужно что бы опция выбиралась в товаре. И желательно через radio.
              По документации это подходит msOptions. Вывел дефолтные [[msOptions? &options=`color,size`]], но не отобразились.
                Андрей
                14 октября 2016, 16:59
                0
                Вывел вот так [[msOptions? &options=`color` &tpl=``]]
                но в корзину не добавляет товар…
                  Андрей
                  14 октября 2016, 17:08
                  0
                  но в корзину не добавляет товар…

                  На странице товара в форме добавьте:

                  <input type="hidden" name="id" value="[[*id]]"/>
                  <input type="hidden" name="count" value="1">
                  <input type="hidden" name="options" value="[]">
                    Сергей
                    27 августа 2017, 10:29
                    0
                    Таки не добавляет… Уже все перепробовал…
                      Андрей
                      27 августа 2017, 11:47
                      0


                      Экстрасенсы в отпуске. Где именно не добавляет, код, и т.п.? Если вызывать через дефолтные чанки минишопа добавляет?
                      Сергей
                      27 августа 2017, 12:02
                      0
                      ну можно всю ветку скопировать, что выше, я ж как бы под веткой вписался…
                      Причем тут дефолтные чанки, если в них нет вывода размеров?))) Там естессно все добавляет, но если не запрещать добавление без указания размера
                      Сергей
                      27 августа 2017, 12:07
                      0
                      Вывожу размеры каждого товара в списке товаров так:
                      [[!msOptions? &product=`[[+id]]` &options=`size`]]
                      Убрал поле
                      <input type="hidden" name="options" value="[]">
                      Пока решил так, странно, но работает)))
                      Странно то, что везде во всех темах самый первый совет — добавить это поле… А оно с тем же именем что и селект размеров, уже коллизия.
                      Андрей
                      27 августа 2017, 12:08
                      0
                      ну можно всю ветку скопировать, что выше, я ж как бы под веткой вписался…

                      А ещё можно показать код, чтобы не гадать где именно проблема.

                      Причем тут дефолтные чанки, если в них нет вывода размеров?))) Там естессно все добавляет

                      В msProduct.content есть вывод размеров, сюрприз, правда? https://minishop2.com/catalog/category-3/item-31

                      Если с дефолтным всё добавляет, думаю очевидно, что проблема в коде?

                      Сергей
                      27 августа 2017, 12:34
                      0
                      ммммм… minishop2.com/catalog/category-3/item-31 — это товар… мммм, данная ветка про КАТЕГОРИЮЮ…
                      вот тут началось про категорию — modx.pro/help/4991/#comment-35890
                      да и я на всякий уточнил в самом первом своем вопросе —
                      Вывожу размеры каждого товара в списке товаров так:
                      Сергей
                      27 августа 2017, 12:39
                      0
                      странно, что Безумкин в демо-сайте оставил 200% косяк с добавлением товаров с размерами — т.е. со страницы списка товаров (сиречь категория) можно добавить в корзину товар без выбора размера, со страницы товара — можно добавить товар в корзину только с размером, с точки зрения бухгалтера полный хаос и обвал квартального отчета… или мы не про магазин?)))
                      Андрей
                      27 августа 2017, 12:52
                      +1
                      ммммм… minishop2.com/catalog/category-3/item-31 — это товар… мммм, данная ветка про КАТЕГОРИЮЮ…
                      Вывод опций в категории, внезапно, отличается только вызовом msOptions с явным указанием id продукта.

                      Странно то, что везде во всех темах самый первый совет — добавить это поле… А оно с тем же именем что и селект размеров, уже коллизия.
                      Там не то же имя, а указание массива, name=«options[size]» и name=«options[color]» например.

                      Вот рабочий код, из дефолтного чанка tpl.msProducts.row (немного сократил чтобы не было простыней кода), всё прекрасно добавляется.:
                      <div class="row ms2_product">
                          <div class="col-md-10">
                          	
                              <form method="post" class="ms2_form">
                              	
                                  <a href="{$id | url}">{$pagetitle}</a>
                                  <span class="price">
                                      {$price} {'ms2_frontend_currency' | lexicon}
                                  </span>
                                  {if $old_price?}
                                      <span class="old_price">{$old_price} {'ms2_frontend_currency' | lexicon}</span>
                                  {/if}
                                  <button class="btn btn-default pull-right" type="submit" name="ms2_action" value="cart/add">
                                      <i class="glyphicon glyphicon-barcode"></i> {'ms2_frontend_add_to_cart' | lexicon}
                                  </button>
                                  <input type="hidden" name="id" value="{$id}">
                                  <input type="hidden" name="count" value="1">
                                  <input type="hidden" name="options" value="[]">
                                  
                                  {$_modx->runSnippet('msOptions', [
                      			    'product' => $id,
                      			    'options' => 'size,color'
                      			])}
                         				
                              </form>
                      
                          </div>
                      </div>

                      странно, что Безумкин в демо-сайте оставил 200% косяк с добавлением товаров с размерами — т.е. со страницы списка товаров (сиречь категория) можно добавить в корзину товар без выбора размера, со страницы товара — можно добавить товар в корзину только с размером, с точки зрения бухгалтера полный хаос и обвал квартального отчета… или мы не про магазин?)))

                      Это здесь вообще не причём, демо на то и есть демо, там показаны разные возможности, а не собран полноценный магазин.
                      Сергей
                      27 августа 2017, 21:17
                      0
                      ну вот и он, код, оказалось, все дело в том, что у меня вывод опции шел ПЕРЕД
                      <input type="hidden" name="options" value="[]">
                      Теперь все чики-пуки!
                      спс.
                  Андрей
                  14 октября 2016, 16:59
                  0
                  Вывел дефолтные [[msOptions? &options=`color,size`]], но не отобразились.

                  Они точно заполнены? Выводите на самой странице товара, или в чанке?

                  И желательно через radio.

                  Посмотрите стандартные чанки msOptions, и переделайте на radio =)
    Андрей
    14 октября 2016, 17:02
    0
    Вывел вот так [[msOptions? &options=`color` &tpl=``]]

    Там стандартный чанк tpl.msOptions, а &tpl=`` — только распечатает массив доступных плейсхолдеров.
      Андрей
      14 октября 2016, 17:20
      0
      1. Вывелось, в корзину отправляется. В корзине тоже надо что-то править, что бы было видно какая опция выбралась?
      2. И в корзину когда отправляю товар с разным цветом, в корзине просто один товар увеличивается в количестве, можно ли их сделать разными товарами?
        Андрей
        14 октября 2016, 17:26
        0
        1. Вывелось, в корзину отправляется. В корзине тоже надо что-то править, что бы было видно какая опция выбралась?

        По умолчанию в чанке корзины есть код:

        {if $product.options?}
                                        <div class="small">
                                            {$product.options | join : '; '}
                                        </div>
                                    {/if}
        И он сразу должен выводить все выбранные опции.

        2. можно ли их сделать разными товарами?

        Оно так и должно работать при выборе разных опций. Проверяйте ваши чанки/страницы на ошибки. Смотрите как сделано на сайте — https://minishop2.com
    Andrew
    07 декабря 2018, 14:04
    0
    Может, кому пригодится.
    Была задача перенаправлять на карточку товара, если у товара есть опции (в данном случае размер), а в остальных случаях сразу добавлять в корзину. Собственно самый простой вариант, менять кнопку в чанке msProduct:
    {if $size?}
                               <button class="btn button min" onclick="window.location.href='{$id | url}'">В корзину</button>
                                 {else}
                                <button class="btn button min" type="submit" name="ms2_action"  value="cart/add">
                                В корзину
                            </button>
                                {/if}