За последние 24 часа нас посетили 16460 программистов и 1678 роботов. Сейчас ищут 882 программиста ...

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

Тема в разделе "PHP для новичков", создана пользователем Tchort, 26 май 2011.

  1. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    Пытаюсь написать скрипт добавления нескольких товаров в корзину. Но не могу понять алгоритм действий.

    Есть чекбокс <input name="addmebasket" type="checkbox" checked="checked"/>

    В скрипте обработки не знаю как это расписать.
     
  2. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Какой еще алгоритм? Предположим есть юзер, у юзера есть свой ид, при клике добавляется запись с ID товара, ID юзера и статус.
     
  3. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    Вот, сформулировал вопрос. Есть функция добавления товаров в корзину, но она не позволяет добавлять массив, только по одному товару.

    Как проверить у каких именно товаров чекбоксы отмечены, посчитать сколько чекбоксов и столько же раз запустить функцию добавления товара? Чтобы каждый раз функция добавляла новый товар.
     
  4. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    <input name="addmebasket[]" type="checkbox" value="айди_товара" checked="checked"/>

    а получать $_REQUEST['addmebasket'], получишь массив айди товаров, которые выбраны для добавления в корзину
     
  5. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    Как определить сколько товаров выбрано (сколько в массиве) и столько же раз запустить цикл с функцией добавления каждого товара?
    Не пойму как именно поочереди товары в цикле добавлять.
     
  6. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    sizeof($array)

    foreach($array as $id){ ... }
     
  7. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    Спасибо огромное.
     
  8. bkm

    bkm Активный пользователь

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    я использую count($array)
     
  9. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    я тоже раньше пользовался. но в связи с тем, что в разных языках программирования размер массива узнаётся по разному, легче оказалось пользоваться sizeof - лучше запоминается.
     
  10. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    Что то идет не так:
    В хтмл
    HTML:
    1. <input name="addmanybasket[]" type="checkbox" value="<?echo $arElement["ID"]?>" checked="checked" class="cb"/>
    В пхп
    PHP:
    1.    
    2. $productarray = $_REQUEST['addmamybasket'];
    3.     $countproduct = count($productarray);
    4.         for ( $i = 0; $i < $countproduct; $i++ ) {
    5.             if ($QUANTITY[$i]>0) {
    6.                 Add2BasketByProductID($ID[$i], $QUANTITY[$i], $product_properties[$i]);
    7.             }
    8.         }
     
  11. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Tchort
    воо, я ждал этого вопроса. каким образом ты связываешь кол-во товара с выбранными айди? :)
    не пробовал сделать print_r массива с количеством и выбранными айди?
    будешь удивлён, увидев, что их длина отличается
     
  12. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    А как тогда нужно? Я хотя бы в нужном направлении двигаюсь?
     
  13. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    этого я сказать точно не могу

    этого я тоже сказать точно не могу. способов много. как вариант:

    HTML:
    1. <input type="checkbox" name="products[p1][id]" value="1">
    2. <input type="text" name="products[p1][value]" value="0">
    3.  
    4. <input type="checkbox" name="products[p2][id]" value="2">
    5. <input type="text" name="products[p2][value]" value="0">
    PHP:
    1. <?php
    2.   $products = $_REQUEST['products'];
    3.   foreach($products as $product){
    4.     if(isset($product['id']) && $product['value'] > 0){
    5.       // тут нужно заносить данный продукт в корзину
    6.     }
    7.   }
    8. ?>
     
  14. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    Gromo
    PHP:
    1. if(!$strError && Add2BasketByProductID($product['id'], $QUANTITY, $product['value']))
    2.             {
    3.                 if($action == "ADD2BSKETMANY")
    4.                     LocalRedirect($APPLICATION->GetCurPageParam("", array($arParams["PRODUCT_ID_VARIABLE"], $arParams["ACTION_VARIABLE"])));
    5.             }
    Как узнать кол-во этого товара?

    И я сказать честно, не понял что в форме))
    HTML:
    1.      <input type="checkbox" name="products[p1][id]" value="1">
    2.      <input type="text" name="products[p1][value]" value="0">
    3.      
    4.      <input type="checkbox" name="products[p2][id]" value="2">
    5.      <input type="text" name="products[p2][value]" value="0">
    1ое - ID, 2ое - значение чего?

    Функция для добавления товара такая:

    Basket::Add(
    array arFields
    );

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

    arFields (
    PRODUCT_ID - уникальный в рамках модуля код товара (обязательное поле);
    PRODUCT_PRICE_ID - дополнительный код товара;
    PRICE - стоимость единицы товара (обязательное поле);
    CURRENCY - валюта стоимости единицы товара (обязательное поле), если валюта отличается от базовой валюты для данного сайта, то стоимость будет автоматически сконвертирована по текущему курсу;
    WEIGHT - вес единицы товара;
    QUANTITY - количество единиц товара;
    LID - сайт, на котором сделана покупка (обязательное поле);
    DELAY - флаг "товар отложен" (Y/N);
    CAN_BUY - флаг "товар можно купить" (Y/N) - может устанавливаться автоматически про наличии функции обратного вызова для поддержки актуальности корзины;
    NAME - название товара (обязательное поле);
    CALLBACK_FUNC - название функции обратного вызова для поддержки актуальности корзины (описание ниже);
    MODULE - модуль, добавляющий товар в корзину;
    NOTES - особые заметки, например, тип цены;
    ORDER_CALLBACK_FUNC - название функции обратного вызова для оформления заказа (описание ниже);
    DETAIL_PAGE_URL - ссылка на страницу детального просмотра товара;
    CANCEL_CALLBACK_FUNC - название функции обратного вызова для отмены заказа (описание ниже);
    PAY_CALLBACK_FUNC - название функции обратного вызова, которая вызывается при установке флага "Доставка разрешена" заказа;
    FUSER_ID - идентификатор пользователя интернет-магазина, необязательный параметр, по умолчанию CSaleBasket::GetBasketUserID() (текущий пользователь);
    PROPS - массив свойств товара, который сохраняется в корзине. Каждый элемент этого массива является массивом следующего формата:
    array("NAME" => "Название свойства",
    "CODE" => "Код свойства",
    "VALUE" => "Значение свойства",
    "SORT" => "Индекс сортировки")
    );
     
  15. Benjamin

    Benjamin Активный пользователь

    С нами с:
    23 янв 2009
    Сообщения:
    154
    Симпатии:
    0
    Адрес:
    Тула
    Битрикс?
     
  16. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Tchort
    value = quantity. какие ещё дополнительные поля хочешь добавить, я не знаю - просто показал пример как можно сделать.

    воспользуйся print_r для более наглядного отображения полученных данных - некоторые вопросы должны исчезнуть.