Множественный выбор параметра товара в Минимагазине NetCat
По-умолчанию Минимагазин NetCat предлагает для каждого уникального объекта генерировать отдельную кнопку "положить в корзину". То есть, скажем, если существует несколько модификаций товара, отличающихся только размером (ну, или цветом), то в полном выводе объекта нам придется генерировать столько кнопок "положить в корзину", сколько вариантов размеров существует. Например, 10. Данный рецепт позволяет обойти это ограничение: при выборе размера из выпадающего списка с помощью AJAX-запроса без перезагрузки страницы генерируется уникальная кнопка "положить в Корзину".

Версия NetCat: любая 4.x.x с модулем "Минимагазин"
Статус: стабильный, но инструкцию писал "программист" в плохом смысле слова. Куча кода и ничего не понятно.
В чем суть? (описание от автора решения, написана по памяти в 2015 году)
Положим у нас есть минимагазин, а в нем компонент "Товар: ботинки" и мы хотим сделать возможность выбирать ботинки разного размера. Делается это примерно так:
- создаем список Size, в нем все возможные размеры обуви
- создаем поле Size, множественный выбор, связываем со списком
- в выводе объекта генерим список размеров данного ботинка
- теперь можно выбирать размеры, которые есть у данного конкретного ботинка. Осталась одна проблема: в минимагазине можно положить в корзину все, что угодно, у чего есть имя, цена и URL. Но не размер. Обойдем это посредством генерации кнопки ajax'ом. Для этого:
- создаем шаблон компонента, который возвращает "код кнопки", получив ее имя, цену и URL из REQUEST
- на выпадающий список с размерами навешиваем скрипт, который AJAX'ом отправляет на созданный только что шаблон модифицированное имя объекта в котором в явном виде фигурирует размер
- полученный в ответ код вписываем в кнопку. Mission complete!
Инструкция по установке (написана другим программистом в стиле "вот вам куча кода и я не хочу думать о том, чтобы хоть что-то было понятно и уж тем более описывать это литературно и с огоньком")
Инструкция приведена для полного отображения объекта.
- В полном отображении объекта пишем следующий код:
var size= \$('select.selectBlock option:selected').text();
AjaxLoad(size);
\$('select.selectBlock').change(function(){
var size= \$('select.selectBlock option:selected').text();
AjaxLoad(size);
});
function AjaxLoad(size){
$.post(
'$subLink?nc_ctpl=187',
{
name: '$f_Name (размер ' + size + ')',
price: $f_Price,
url: '$fullLink',
isNaked: 1
},
function(html){
$('#mshop').html(html);
});
}
</script>
<div id='mshop'></div>
где size, в нашем случае - это поле типа "список", в котором представлены варианты размеров одежды.
- Далее создаем шаблон текущего компонента и в его системных настройках пишем:
echo $nc_minishop->show_put_button($_REQUEST['name'], $_REQUEST['price'], $_REQUEST['url']);
}
- Теперь вернемся к ранее написанному коду. Найдите строку
'$subLink?nc_ctpl=187'
и вместо 187 подставьте номер своего, только что созданного шаблона. - Удачной установки! :)