Загрузка. Пожалуйста, подождите...

                    

                        
RSS
  • Главная
  • Регистрация
  • Карта сайта
  • О нас

» Drupal » Drupal 6 » Дробное количество товара в Ubercart

Дробное количество товара в Ubercart

Drupal » Drupal 6 Комментарии (0)

Последнее время приходится создавать сайты не уровня визиток и блогов, а что-то покрупнее, поэтому полюбился мне Drupal. Здесь я еще не писал о нем, несмотря на то, что сделано немало, какие-то решения найдены, что-то написано самостоятельно.


Но начну наконец делиться решениями в блоге с темы, обозначенной в заголовке. Суть в том, что этот вопрос неоднократно поднимался как в рунете, так и в буржунете, и даже есть почти решение, но оно не до конца работает.


Собрав воедино информацию из всех источников, я добился возможности задавать дробное количество товара с его страницы и даже изменения этого количества в корзине. Но если количество товара меньше единицы (0.5, например), то при обновлении корзины, а также при изменении количества, он удаляется.


Итак, ниже список действий, который я выполнил, чтобы реализовать дробное количество товара в OpenStore (Ubercart на Drupal 6).

Работа с БД


Для начала необходимо изменить тип данных для количества товаров. Реализуется это выполнением MySQL-запроса. Как его сделать - отдельная тема, тут гугл подскажет. Намекну лишь, что вам потребуется PHPMyAdmin. Запрос следующий:

ALTER TABLE `uc_cart_products` MODIFY COLUMN `qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;
ALTER TABLE `uc_orders` MODIFY COLUMN `product_count` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;
ALTER TABLE `uc_products` MODIFY COLUMN `default_qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 1.00;
ALTER TABLE `uc_order_products` MODIFY COLUMN `qty` FLOAT(6,2) UNSIGNED NOT NULL DEFAULT 0;

Работа с файлами


Все указанные файлы находятся в папке модуля ubercart, номера строк (числа в скобках) могут несколько не совпадать, просто ищите где-то в этом районе.


uc_cart/uc_cart.module (1445)

db_query("UPDATE {uc_cart_products} SET qty = %d, changed = UNIX_TIMESTAMP(), data = '%s' WHERE cart_item_id = %d",


заменяем на
db_query("UPDATE {uc_cart_products} SET qty =%f, changed = UNIX_TIMESTAMP(), data = '%s' WHERE cart_item_id = %d",


uc_cart/uc_cart.module (1509)

db_query("INSERT INTO {uc_cart_products} (cart_id, nid, qty, changed, data) VALUES ('%s', %d, %d, %d, '%s')", $cid, $node->nid, $qty, time(), serialize($data));


заменяем на
db_query("INSERT INTO {uc_cart_products} (cart_id, nid, qty, changed, data) VALUES ('%s', %d, %f, %d, '%s')", $cid, $node->nid, $qty, time(), serialize($data));


uc_order/uc_order.module (1043)

db_query("UPDATE {uc_orders} SET uid = %d, order_status = '%s', order_total = %f, product_count = %d, primary_email = '%s', "


заменяем на
db_query("UPDATE {uc_orders} SET uid = %d, order_status = '%s', order_total = %f, product_count = %f, primary_email = '%s', "


uc_order/uc_order.module (1143)

db_query("UPDATE {uc_orders} SET product_count = %d WHERE order_id = %d", $count, $order->order_id);


заменяем на
db_query("UPDATE {uc_orders} SET product_count = %f WHERE order_id = %d", $count, $order->order_id);


uc_order/uc_order.install (48—51)

'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,


заменяем на
'type' => 'float',
'precision' => '6',
'scale' => '2',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 1.00,


uc_product/uc_product.module (1204—1205)

if ($qty < 1) {
  uc_cart_remove_item($nid, $cid, $data);


заменяем на
if ($qty < 0.01) {
  uc_cart_remove_item($nid, $cid, $data);


uc_product/uc_product.module (1208)

db_query("UPDATE {uc_cart_products} SET qty = %d, changed = %d WHERE nid = %d AND cart_id = '%s' AND data = '%s'", $qty, time(), $nid, $cid, serialize($data));


заменяем на
db_query("UPDATE {uc_cart_products} SET qty = %f, changed = %d WHERE nid = %d AND cart_id = '%s' AND data = '%s'", $qty, time(), $nid, $cid, serialize($data));


uc_product/uc_product.module (1511)

if (!is_numeric($form_state['values']['qty']) || intval($form_state['values']['qty']) <= 1)


заменяем на
if (!is_numeric($form_state['values']['qty']) || $form_state['values']['qty'] < 0.01)


docs/hooks.php (1673—1678)

if ($qty < 1) {
  uc_cart_remove_item($nid, $cid, $data);
}
else {
  db_query("UPDATE {uc_cart_products} SET qty = %d, changed = %d WHERE nid = %d AND cart_id = '%s' AND data = '%s'", $qty, time(), $nid, $cid, serialize($data));
}


заменяем на
if ($qty < 0.01) {
  uc_cart_remove_item($nid, $cid, $data);
}
else {
  db_query("UPDATE {uc_cart_products} SET qty = %f, changed = %d WHERE nid = %d AND cart_id = '%s' AND data = '%s'", $qty, time(), $nid, $cid, serialize($data));
}

Все готово


Если вы видели ранее представленные решения (а точнее попытки), поймете, что я сделал не так много. Вся проблема заключалась в том, что были забыты валидаторы значений, и если количество товара в корзине было меньше единицы, то он удалялся оттуда.

Орешек знаний твёрд, но всё же
Ускорим познавания процесс,
И в этом нам с тобой поможет
Подписка на информативный RSS...

Хотите получать информацию о новых записях на e-mail? Подпишитесь на RSS-рассылку. Введите адрес вашей электронной почты в форму ниже и нажмите "Подписаться".

Уважаемый посетитель, вы зашли на сайт как незарегистрированный пользователь. Оставленные комментарии отправляются на модерацию. После регистрации появится возможность попасть в список Комментаторов.


Другие новости по теме:

  • Новый язык запросов в Яндексе
  • Отступы после изображений в IE6/7
  • Внимание! Мошенники!
  • Photoshop CS5
  • Автопостинг в Twitter через oAuth
  • 19-12-2011, 01:45 
    Просмотров: 870



    Добавление комментария


    Ваше Имя:
    Ваш E-Mail:
    Код: Включите эту картинку для отображения кода безопасности
    обновить, если не виден код
    Введите код






    доставщик пиццы вакансии
    on-jobs.ru
    • QR-код данной страницы

    • Вход на сайт

        Логин
        Пароль
         
        » Регистрация на сайте!
        » Забыли пароль?
    • Навигация

      • Главная
      • Web-дизайнерам
      • CSS-хитрости
      • SEO
      • Сервисы
      • Заработок в интернете
        • На сайте
        • Без сайта
      • Photoshop
      • Интернет-полезности
      • BestMasterиZация
      • Обзоры
      • Цитаты
      • Из зомбоящика
      • Блог
      • Разработка
      • Проекты
      • Мое мнение
      • Обманы
      • Twitter
      • Twidium
    • Опрос

        Какую поисковую систему предпочитаете?

        Google
        Yandex
        Rambler
        Апорт
        Mail.ru
        Nigma
        Другие


    Photoshop Online
    Просмотр скрытой информации ВКонтакте

    © WebHolt
    Рейтинг блогов
    Копирование материалов с сайта разрешено исключительно при наличии активной ссылки на сайт