Начиная с версии 1.2.0 в теме дизайна Megashop 3.0 есть возможность подменить стандартные фразы "В наличии" / "Не в наличии" на свои, в зависимости от наличия на конкретном складе.
К сожалению, текущий штатный функционал настроек темы не позволяет нам создать интуитивно понятный интерфейс, поэтому требуется ввод несложного кода.
Для данного функционала нужно создать или использовать существующий блок с id megashop.stocks_available_statuses
Напомню, что блоки создаются в разделе "Сайт" - "Блоки".
Пример готового кода блока:
{capture assign='stocks_condition'} {literal} {if $stocks['1'] >= 5} {$status = "in-stock"} {$text = "В магазине"} {elseif $stocks['1'] >= 1} {$status = "low"} {$text = "В магазине (мало)"} {elseif $stocks['2'] >= 1} {$status = "in-stock"} {$text = "В наличии на складе"} {elseif $stocks['v1'] > 10} {$status = "low"} {$text = "Предзаказ"} {elseif $stocks['1'] <= 0 && $stocks['2'] <= 0 && $stocks['v1'] <= 0} {$status = "out-of-stock"} {$text = "Нет в наличии"} {else} {$status = "in-stock"} {$text = "В наличии"} {/if} {/literal} {/capture} {$stocks_statuses = [ '1' => [ 'in-stock' => 'Есть', 'low' => 'Мало', 'critical' => 'Почти нет', 'out-of-stock' => 'Нет' ], '2' => [ 'low' => 'Осталось {$n}', 'out-of-stock' => 'Нет' ] ]} {$wa->globals('megashop.stocks_available_statuses', ['stocks_condition' => $stocks_condition, 'stocks_statuses' => $stocks_statuses])}
Далее описание составляющих этого кода:
{capture assign='stocks_condition'} {literal} {if $stocks['1'] >= 5} {$status = "in-stock"} {$text = "В магазине"} {elseif $stocks['1'] >= 1} {$status = "low"} {$text = "В магазине (мало)"} {elseif $stocks['2'] >= 1} {$status = "in-stock"} {$text = "В наличии на складе"} {elseif $stocks['v1'] > 10} {$status = "low"} {$text = "Предзаказ"} {elseif $stocks['1'] <= 0 && $stocks['2'] <= 0 && $stocks['v1'] <= 0} {$status = "out-of-stock"} {$text = "Нет в наличии"} {else} {$status = "in-stock"} {$text = "В наличии"} {/if} {/literal} {/capture}
где:
$stocks['n1'] - указание конкретного склада. Вместо n2/n3/n1 нужно укзать id вашего склада, пример: $stocks['1'] , $stocks['2']. Если склад виртуальный, то добавить "v", пример: $stocks['v1'].
В теле условий указать присваивание двух переменных:
К сожалению, в текущем штатном функционале складов не указывается ID складов. Для того, чтобы узнать ID нужно навести курсор на кнопку редактирования склада и посмотреть на ссылку:
В том же блоке ниже добавляем код:
{$stocks_statuses = [ 'n1' => [ 'in-stock' => 'Есть', 'low' => 'Мало', 'critical' => 'Почти нету', 'out-of-stock' => 'Нету' ], 'n2' => [ 'low' => 'Осталось {$n}', 'out-of-stock' => 'Нету' ] ]}
Это массив, у которого ключи - id складов, значения - массив вида 'статус' -> 'текст'
В конце блока обе переменные ($stocks_condition, $stocks_statuses)(или одну, если только одна) поместить в глобальную переменную, в виде массива, с ключами, совпадающими с названиями переменных:
{$wa->globals('megashop.stocks_available_statuses', ['stocks_condition' => $stocks_condition, 'stocks_statuses' => $stocks_statuses])}
При этом должная быть выключена опция вывода точного количества товра.