Как сделать обязательное поле размера, цены

Всем доброе время суток. Подскажите как сделать обязательным при добавлении в корзину размера, цены в карточке товара?
в чанке tpl.msProducts.row
у меня вызов идет:
[[!msOptions:toPlaceholder=`result`? 
                &product=`[[+id]]` 
                &name=`size` 
                &tpl=`tpl.msOptions_sizes_list` 
                &tplOuter=`@INLINE <div class="product-sizes">[[+rows]]</div>` 
                &tplRow=`@INLINE <span class="product-sizes__item product-sizes__item--active">[[+value]]</span>`
            ]]
стоит он внутри формы добавления в корзину
<form method="post" class="ms2_form">
            <input type="hidden" name="id" value="{$id}">
    <input type="hidden" name="count" value="1">
    <input type="hidden" name="options" value="[]">

.... тут

<button class="btn btn-default pull-right btn--buy" type="submit" name="ms2_action" value="cart/add">
            <span class="icon icon--btn-buy"></span><i class="glyphicon glyphicon-barcode"></i> {'ms2_frontend_add_to_cart' | lexicon}
        </button>
</form>

вот чанк оформления каждого чекбокса tpl.msOptions_sizes_list:
{foreach $options as $name => $values}
    {foreach $values as $value}
        <label>
            <span>{$value}</span>
            <input type="radio" [[+selected]] name="options[{$name}]" value="{$value}" required="required">
        </label>
    {/foreach}
{/foreach}
если просто добавить required=«required» в инпут то оно не добавляет в корзину но и не пишет, что поле не выбрано
Саша Иващенко
24 января 2018, 12:28
modx.pro
1
2 358
0

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

Саша Иващенко
24 января 2018, 16:35
0
Есть идеи?
    Саша Иващенко
    19 февраля 2018, 03:21
    0
    вопрос актуален
      Михаил
      19 февраля 2018, 13:37
      +1
      А в чем собственно проблема?
      Документация

      Сделать плагин, который будет проверять, что прилетело и не добавлять если чего то нет
        Саша Иващенко
        19 февраля 2018, 15:04
        0
        Я делал через js
        $(document).ready(function () {
        miniShop2.Callbacks.Cart.add.before = function () {
        if ( $('form input[name="options[size]"]:checked').val() === undefined ) {
        alert('Выберите размер!');
        return false;
        }
        }}
        но если у товара нет размеров (например аксессуар) тогда проблема с добавлением такого товара в корзину получается.
          Михаил
          19 февраля 2018, 15:09
          +1
          Поэтому лучше через плагин, там уже все можно проверить
            Саша Иващенко
            19 февраля 2018, 15:39
            0
            <?php
            switch ($modx->event->name) {
                // События на добавление товара
                case 'msOnBeforeAddToCart': 
                    // тут проверка на что ? на выбрана ли опция размера?
                    break; // получает $product, $count, $options и $cart
            }
            такой плагин и вешать на событие msOnBeforeAddToCart?
              Михаил
              19 февраля 2018, 15:44
              +1
              Ну в правильном направлении. По идее тут Вы можете делать все что угодно.
                Саша Иващенко
                19 февраля 2018, 18:41
                0
                так что писать то?
                if (empty($options)) {echo «Выберите размер!»;}

                я не силен в php если честно
                  Михаил
                  19 февраля 2018, 18:44
                  +1
                  Сделай
                  print_r($options);
                  Посмотри что там за размер отвечает, и если его нет то
                  $modx->event->output('Необходимо выбрать размер');
                    Саша Иващенко
                    19 февраля 2018, 18:52
                    0
                    print_r($options);
                    выдает пустой массив
                    [msOnBeforeAddToCart]Array
                    (
                    )
                    если что то выбрал то
                    [msOnBeforeAddToCart]Array
                    (
                        [size] => M
                    )
                    а как проверить если у товара есть опция но она не выбрана?
                      Михаил
                      19 февраля 2018, 18:56
                      +1
                      Вот таблица, которая связывает товар и опцию. Проверяй id ресурса и ключ опции. Если есть, тогда проверяй на наличии в options
                        Саша Иващенко
                        19 февраля 2018, 19:42
                        0
                        id ресурса так $product->id
                        а ключ опции как проверить?
                          Саша Иващенко
                          19 февраля 2018, 20:49
                          0
                          я не понимаю
                            Саша Иващенко
                            20 февраля 2018, 14:40
                            0
                            помогите пожалуйста. я не знаю что делать дальше
                              Саша Иващенко
                              21 февраля 2018, 00:21
                              1
                              +1
                              спасибо большое за советы! сделал
                              <?php
                              switch ($modx->event->name) {
                                  // События на добавление товара
                                  case 'msOnBeforeAddToCart': 
                                      // массив размеров товара
                                      $sizename = $options['size'];  // беру имя размера, на который делается заказ
                                      $arr = $product->get('size'); // беру массив размеров товара
                                      
                                      if (empty($arr)) {
                                      }
                                      elseif (in_array($sizename, $arr)){
                                      }
                                      else {
                                          $modx->event->output('Необходимо выбрать размер');
                                      }
                              
                                      break;  //получает $product, $count, $options и $cart
                              }
                              подскажите как ifelse изменить на более корректный вариант?
                            Саша Иващенко
                            19 февраля 2018, 18:55
                            0
                            <?php
                            switch ($modx->event->name) {
                                // События на добавление товара
                                case 'msOnBeforeAddToCart': 
                                    // тут проверка на что ? на выбрана ли опция размера?
                                    print_r($options);
                                    if (empty($options)) {
                                        $modx->event->output('Необходимо выбрать размер');
                                    }
                                    
                                    break; // получает $product, $count, $options и $cart
                            }
                Александр Иващенко
                14 апреля 2018, 03:46
                0
                <?php
                switch ($modx->event->name) {
                    // События на добавление товара
                    case 'msOnBeforeAddToCart': 
                        // тут проверка на что ? на выбрана ли опция размера?
                        
                        // массив размеров товара
                        $product->get('size');
                        $sizename = $options['size'];  // беру имя размера, на который делается заказ
                        $sizename1 = $options;
                        $arr = $product->get('size');
                        
                        if (empty($arr)) {
                            echo "Массив пустой";
                        }
                        elseif (in_array($sizename, $arr)){
                            echo "Нашел !!!";
                        }
                        else {
                            $modx->event->output('Необходимо выбрать размер');
                        }
                        break;  //получает $product, $count, $options и $cart
                }
                вдруг кому пригодится. сами думаю сможете подчистить если нужно будет
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  17