Как сделать обязательное поле размера, цены
Всем доброе время суток. Подскажите как сделать обязательным при добавлении в корзину размера, цены в карточке товара?
в чанке tpl.msProducts.row
у меня вызов идет:
вот чанк оформления каждого чекбокса tpl.msOptions_sizes_list:
в чанке 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» в инпут то оно не добавляет в корзину но и не пишет, что поле не выбрано Комментарии: 17
Есть идеи?
вопрос актуален
А в чем собственно проблема?
Документация
Сделать плагин, который будет проверять, что прилетело и не добавлять если чего то нет
Документация
Сделать плагин, который будет проверять, что прилетело и не добавлять если чего то нет
Я делал через js
$(document).ready(function () {
miniShop2.Callbacks.Cart.add.before = function () {
if ( $('form input[name="options[size]"]:checked').val() === undefined ) {
alert('Выберите размер!');
return false;
}
}}
но если у товара нет размеров (например аксессуар) тогда проблема с добавлением такого товара в корзину получается.
Поэтому лучше через плагин, там уже все можно проверить
<?php
switch ($modx->event->name) {
// События на добавление товара
case 'msOnBeforeAddToCart':
// тут проверка на что ? на выбрана ли опция размера?
break; // получает $product, $count, $options и $cart
}
такой плагин и вешать на событие msOnBeforeAddToCart?
Ну в правильном направлении. По идее тут Вы можете делать все что угодно.
так что писать то?
if (empty($options)) {echo «Выберите размер!»;}
я не силен в php если честно
if (empty($options)) {echo «Выберите размер!»;}
я не силен в php если честно
Сделай
print_r($options);
Посмотри что там за размер отвечает, и если его нет то $modx->event->output('Необходимо выбрать размер');
print_r($options);
выдает пустой массив[msOnBeforeAddToCart]Array
(
)
если что то выбрал то [msOnBeforeAddToCart]Array
(
[size] => M
)
а как проверить если у товара есть опция но она не выбрана?
Вот таблица, которая связывает товар и опцию. Проверяй id ресурса и ключ опции. Если есть, тогда проверяй на наличии в options
id ресурса так $product->id
а ключ опции как проверить?
а ключ опции как проверить?
я не понимаю
помогите пожалуйста. я не знаю что делать дальше
спасибо большое за советы! сделал
<?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 изменить на более корректный вариант? <?php
switch ($modx->event->name) {
// События на добавление товара
case 'msOnBeforeAddToCart':
// тут проверка на что ? на выбрана ли опция размера?
print_r($options);
if (empty($options)) {
$modx->event->output('Необходимо выбрать размер');
}
break; // получает $product, $count, $options и $cart
}
<?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
}
вдруг кому пригодится. сами думаю сможете подчистить если нужно будет
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.