Кнопка Добавить в корзину для всех товаров

#
Re: Кнопка Добавить в корзину для всех товаров
присоединяюсь
если кто делал, выложите посмотреть
#
Re: Кнопка Добавить в корзину для всех товаров
Kotoff писал(а):

а как реализованно? и какая цена вопроса?
#
Re: Кнопка Добавить в корзину для всех товаров
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'])


Желаю удачи.
Заказов не беру. Консультирую редко.
#
Re: Кнопка Добавить в корзину для всех товаров
Спасибо! Будем разбираться ))
#
Re: Кнопка Добавить в корзину для всех товаров
С Post не заработало, поставил Get  и все ок. Спасибо )))
#
Re: Кнопка Добавить в корзину для всех товаров
Get на такую форму - это вы зря...
Заказов не беру. Консультирую редко.
#
Re: Кнопка Добавить в корзину для всех товаров
Спасибо, Kotoff, что поделились своей наработкой. Ваша информация как всегда в самую точку.
#
Re: Кнопка Добавить в корзину для всех товаров
boffin, всегда пожалуйста.

Mihey2007, насчет Post и Get - это зависит от того какой метод у вас указан в параметре method тега <form> в том же xsl-шаблоне но чуть выше. Вероятно, там где я решал эту задачу в форме был прописан метод post, а везде по-умолчанию в шаблоне указан get, поэтому у вас сразу и не заработало.
В принципе, чтобы не мучаться "угадыванием" метода, в php есть массив $_REQUEST, по умолчанию содержащий в себе элементы массивов $_GET, $_POST и $_COOKIE. Так что приведенный фрагмент кода для универсальности можно записать так:
isset($_REQUEST['multiadd_x']) || isset($_REQUEST['multiadd.x'])
для кнопки-картинки или
isset($_REQUEST['multiadd'])
для обычной кнопки.

Ну и парсить тогда, разумеется, надо будет тоже $_REQUEST:
foreach ($_REQUEST as $key => $value)
.
Заказов не беру. Консультирую редко.
#
Re: Кнопка Добавить в корзину для всех товаров
в форме прописан метод Post, но все равно при нажатии на мультикнопку в строке адреса - показываются все параметры (для GET), хотя и не должны показываться. и post не работает, с заменой на $_REQUEST тоже работает
#
Re: Кнопка Добавить в корзину для всех товаров
Осознал свою ощибку ))) у меня в форме с методом GET была еще одна форма с методом POST. Все с POST работает )))) Огромное спасибо ))))
Авторизация