Mihey2007, та там фсё просто
Копнул архивы годичной давности и нашел там пример. Он хоть старый, но должен быть рабочий.
Сначала подготовим обработчик.В ТДС "Интернет-магазин", на вкладке "Настройки страницы", перед кодом "Обработка скачивания файла электронного товара" (там комментарий такой, это почти в самом начале, где-то 7-9 строка сверху),
так вот перед этим комментарием вставляем примерно следующее:
// вставка "мультикнопки"
if (isset($_POST['multiadd_x']) || isset($_POST['multiadd.x']))
//если есть признак нажатия мультикнопки
{
// то определим текущего пользователя для добавления товаров мультикнопкой...
if (class_exists("SiteUsers")) {
/* Определяем идентификатор текущего пользователя */
$SiteUsers = &singleton('SiteUsers');
$site_users_id = $SiteUsers->GetCurrentSiteUser();
} else {
$site_users_id = false;
}
// ... и распарсим массив $_POST на предмет наличия в нем переданного положительного числа товаров
foreach ($_POST as $key => $value) {
// названия всех полей формы, содержащих количество товара начинатся со метки "count_" после которой идет id товара
// будем проверять, начинается ли имя очередного элемента массива $_POST со слова "" count_ и если да,
//то явлется ли значение этого элемента целым полозительным числом?
if (substr(to_str($key), 0, 6) == 'count_' && to_int($value) > 0) {
//если элемент массива прошел проверку, то выделим id товара из имени элемента массива
$good_id = substr(to_str($key), 6);
//заполним массив параметров для функции AddIntoCart
$add_param = array();
$add_param['shop_id'] = $current_shop_id;
$add_param['user_id'] = $site_users_id;
$add_param['item_id'] = $good_id;
$add_param['count'] = to_int($value);
$add_param['postpone'] = false;
// и добавим товар в корзину.
$shop->AddIntoCart($add_param);
}
}
}
// конец вставки "мультикнопки"
Потом переходим в редактор XSL шаблонов, и меняем шаблон, отображающий каталог товаров в магазине.
В шаблоне, после вызова темплейта item
<xsl:apply-templates select="item" />
добавляем примерно такую строку
<input type="image" onclick="submit()" id="multiadd" name="multiadd" src="/hostcmsfiles/images/cart.gif" border="0" value="Добавить в корзину" alt="Добавить в корзину" title="Добавить в корзину"/>
В этом примере использована кнопка-картинка, но можно использовать и обычную кнопку.
Далее прилистываем шаблон вниз, примерно на две трети, и находим примерно такой фрагмент:
<!-- Ссылку на добавление в корзины выводим, если:
type != 1 - простой тип товара или делимый (0 - простой, 2 - делимый)
type = 1 - электронный товар, при этом остаток на складе больше 0 или -1,
что означает неограниченное количество -->
<xsl:if test="type != 1 or (type = 1 and (eitem_count > 0 or eitem_count = -1))">
<div style="display: inline; margin-left: 3px">
<div class="left">
<input type="text" size="3" value="1" id="count_{@id}"/>
<img src="/images/map_intocart.gif" width="12" height="21" border="0" usemap="#mapInToCart{@id}" style="margin: 0 0 -6px 1px;"/>
<map name="mapInToCart{@id}">
<area shape="rect" coords="0,0,12,10" onclick="set_count_mod('count_{@id}', 1);" nohref="nohref" />
<area shape="rect" coords="0,11,12,21" onclick="set_count_mod('count_{@id}', -1);" nohref="nohref" />
</map>
</div>
В этом фрагменте намного дорабатываем input для ввода количества - у него есть id а мы добавим к нему name с таким же как у id значением, а заодно сделаем значением по умолчанию не 1 а 0
<input type="text" size="3" value="0" id="count_{@id}" name="count_{@id}" />
Ну и, собсна, все. Должно работать. Теперь при нажатии на добавленную нами кнопку в корзину будут помещаться все товары, у которых пользователь задал количество больше 0.
Примечания.
Если у вас UTF-8 версия HostCMS, то во фрагменте, который вставляется в настройки ТДС нужно в двух местах заменить substr на mb_substr.
Если вместо кнопки-картинки для добавления товаров вы хотите использовать обычную кнопку, то во фрагменте, который вставляется в настройки ТДС в самом первом условии нужно заменить
isset($_POST['multiadd_x']) || isset($_POST['multiadd.x'])
на
isset($_POST['multiadd'])
Желаю удачи.