1

Тема: Остатки в комплектациях

Здравствуйте!
На сайте используются многомерные комплектации, вывод параметров в карточке товара осуществляется через select.
Вопрос следующий, как сделать, чтобы параметры комплектации имеющие нулевые остатки не выводились.

Сейчас ситуация следующая, например есть товар-1, у него есть 5 размеров, 2 из которых имеют нулевые остатки.
Хотелось бы, чтобы выводились только оставшиеся 3 размера у которых не нулевые остатки.

2

Re: Остатки в комплектациях

Это очень интересная задача. Она многогранна.

Сразу ответ:

1. Писать кастомный скрипт, делающий первую комплектацию главной, вторую ведомой.

2. Писать еще более сложный кастомный скрипт и добавлять понятие "Не выбрано" в каждый select, блокировать добавление в корзину, если хотя бы один select не выбран. Фильтровать значения в остальных select'ах при выборе других. ( реализовано на http://nefertiti-gsfr.ru/product/plate-p-361-2-63155/ ).

----------------------------

Ниже немного о логике вещей:

Например, представим ситуацию, что у вас 2 характеристики Цвет и Размер. И вы желаете, чтобы при выборе цвета, отсутствующие размеры скрывались. Сразу возникает вопросы:

- Почему вы думаете, что пользователь решил начать выбор с цвета? Может ему проще с размера начать выбор?
- Как пользователю узнать все возможные размеры, если при выборе цвета он видит только часть размеров?

Ответы на эти вопросы по сути разваливают возможность простого (первого варианта) решения проблемы.

3

Re: Остатки в комплектациях

В данный момент у меня всего характеристика в комплектациях.
То есть у товара по сути меняется только одно значение, размер.

А нельзя ли сделать по примеру, как с кнопкой "купить" в карточке товара (там же указана переменная и стоит знак больше 1), в selecte выбора размера написать, что если остатки меньше нуля их просто не выводить?
Также подставить переменную с указанием, что если больше 1 и уже пошел foreach?
Только я имя переменной не знаю, по-этому не пробовал.)

4

Re: Остатки в комплектациях

Я делал универсальный скрипт для 2 и более характеристики. Выбор характеристик каскадный сверху вниз.
Подглядывал у next : https://www.next.com.ru/ru/g8078s1
Мне нравится, что у них отображается размер с остатком 0, если его реально можно когда-либо заказать.

Игорь, а используете многомерные или обычные комплектации?

5

Re: Остатки в комплектациях

Комплектации многомерные, я так понимаю они используются, если комплектация идет по характеристике.
Возможно  совсем правильно понимаю разницу между ними.

В моем же случае, пользователь выбирает только размер.
И очень бы хотелось, чтобы в раскрывающийся список или будь то кнопки выводились только те значения комплектации (в моем случае размеры), у которых остаток не нулевой.

6

Re: Остатки в комплектациях

При использовании 1 характеристики лучше использовать обычные комплектации.
Пример на демо-сайте http://mega.readyscript.ru/product/bluza-incity/
В product_offers.tpl делаете проверку на $offer.num. Строки с {*EVENTUS*} добавлены мною:

 {elseif $product->isOffersUse()}
    {* Простые комплектации *}
    <div class="product-offers">
        <span class="product-offers_pname">{$product.offer_caption|default:t('Комплектация')}</span>
        <div class="product-offers_values">
            {if count($product.offers.items)>5}
                {* Если комплектаций много, то отобразим их в виде списка *}
                <select class='select' name="offer">
                    {foreach from=$product.offers.items key=key item=offer name=offers}
                     {if $offer.num>0}{*EVENTUS*}
   <option value="{$key}" {if $offer.num <= 0}class="nullComplects"{/if}{if $smarty.foreach.offers.first}checked{/if} {if $check_quantity}data-num="{$offer.num}"{/if} {if $catalog_config.use_offer_unit}data-unit="{$offer->getUnit()->stitle}"{/if} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getOldCost($key)}"}' data-images='{$offer->getPhotosJson()}' data-offer-id='{$offer.id}' data-sticks='{$offer->getStickJson()}'>{$offer.title}</option>
                       {/if} {*EVENTUS*}
                    {/foreach}
                </select>
            {else}
                {* Если комплектаци мало, то отобразим их в виде радиокнопок *}
                {foreach $product.offers.items as $key => $offer}
                    <div class="product-offers_item">
 {if $offer.num>0}{*EVENTUS*}
                        <input value="{$key}" type="radio" name="offer" {if $offer@first}checked{/if} id="offer_{$key}" {if $check_quantity}data-num="{$offer.num}"{/if} {if $catalog_config.use_offer_unit}data-unit="{$offer->getUnit()->stitle}"{/if} data-change-cost='{ ".offerBarcode": "{$offer.barcode|default:$product.barcode}", ".myCost": "{$product->getCost(null, $key)}", ".lastPrice": "{$product->getOldCost($key)}"}' data-images='{$offer->getPhotosJson()}' data-offer-id='{$offer.id}' data-sticks='{$offer->getStickJson()}'>
                        <label {if $offer.num <= 0}class="nullComplects"{/if} for="offer_{$key}">{$offer.title}</label>
  {/if} {*EVENTUS*}
                    </div>
                {/foreach}
            {/if}
        </div>
    </div><br>
{/if}  

7

Re: Остатки в комплектациях

А в чем принципиальная разница между многомерными и обычными?

Как раз в том направлении как Вы и написали думал, только не знал имя переменной.

Спасибо!

8

Re: Остатки в комплектациях

В процессе появился еще один вопрос к этой же теме.
Правильно ли будет написать в каталоге товаров данное условие, чтобы не показывались товары с нулевым остатком, а также как указать, что не показывать товары у которых нет комплектаций, но нулевой остаток?
В настройках модуля каталог есть такая функция, отключить товары с нулевым остатком, но при ее включении, товары которых нет в наличии получается так что недоступны с ошибкой 404, а это несовсем то чего хотелось бы, а также это никак не влияет на вывод параметров в фильтрах. Параметры в фильтрах выводятся, для всех товаров, в том числе и с нулевым остатком которые скрыты.

9

Re: Остатки в комплектациях

Там в настройках есть ещё опция отдавать ли 404 ошибку.

10

Re: Остатки в комплектациях

А существует возможность, также и товары с нулевым остатком не показывать товары остаток у которых единица?

11

Re: Остатки в комплектациях

Добрый вечер!
Чтобы сделать проверку остатков в комплектации мы используем $offer.num, а если нужно нужно проверить остатки в многомерной комплектации, подскажите переменную?
Пробовал следующий код, но не работает, пропадают все значения комплектации:

{if $offer.num>0} (добавленная строка)
<label {if $value@first}class="selected"{/if} for="mo_{$level.prop_id}_{$key}">{$value.val_str}</label>
{/if} (добавленная строка)

12

Re: Остатки в комплектациях

Многомерные комплектации состоят из параметров.
Сочетания параметров соответствуют простой комплектации
Остаток можно проверить только у простой комплектации.
-----

Из этого следует, что проверить остаток параметра многомерной комплектации невозможно логически, если у вас используется более одного параметра.

13

Re: Остатки в комплектациях

А если используется только один параметр?

14

Re: Остатки в комплектациях

Если параметр один, то возможно лучше использовать простую комплектацию?

Связь многомерной комплектации с простой идет через простое сопоставление значений характеристик.
т.е. необходимо перебирать простые комплектации и сравнивать их значения со значением параметра многомерной.

так вы найдете сперва связанную простую комплектацию, а потом у нее уже проверите остаток.