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

Здравствуйте!
На сайте используются многомерные комплектации, вывод параметров в карточке товара осуществляется через 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?
Только я имя переменной не знаю, по-этому не пробовал.)

Повысить оценку Понизить оценку

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

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

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

5

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

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

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

Повысить оценку Понизить оценку

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

Повысить оценку Понизить оценку

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: Остатки в комплектациях

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

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

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

Повысить оценку Понизить оценку