Как узнать количество товаров в корзине (Ubercart)?

Прислано: ddj

чт, 02/09/2010 - 13:46

Всех приветствую!

Решил поделиться одной мелкой премудростью, которую я постиг, копая Друпал методом "научного тыка".

Недавно делал интернет магазин, и передо мной стала задача: вывести в блок корзину. Фишка задачи в том, что стандартный блок корзины от Ubercart не подойдет (см. вложение).

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

Чтобы вывести количество товаров в корзине, пришлось немного поворошить файл uc_cart.module (находится в modules/ubercart/uc_cart/ ). В итоге нашел выражение count(uc_cart_get_contents()), которое и помогло вычислить количество положенных в корзину товаров. Вставил в содержимое блока код:

<?php echo count(uc_cart_get_contents()) ?>

(не забываем элементарного - поставить "Формат ввода" в блоке на "PHP code")

Оформил сопутствующие детали, и получилось очень даже ничего ;-)

По поводу ссылки на страницу оформления заказа оказалось совсем просто: вот она http://сайт.ru/cart/checkout

Ну вот и все. Надеюсь, кому-нибудь этот пост пригодится.

Спасибо за внимание!

Прикрепленный файлРазмер
korzina.jpg47.39 кб
Attached poll "Был ли этот пост полезен?".
Register or login to poll
Results:
Да: 3 голоса
Немного: 5 голосов
Нет: 5 голосов

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Stutzer в чт, 02/09/2010 - 14:38.

Ваше решение не учитывает того факта, что одного товара в корзине может быть несколько штук.
Правильнее было бы вот так:

<?php
$items 
uc_cart_get_contents();
$item_count 0;
foreach (
$items as $item$item_count += $item->qty;
?>


Опубликовано Обухов Никита в чт, 02/09/2010 - 15:43.

uc_cart_get_contents() - это ПОЛНАЯ загрузка корзины, то естьв ыпоняется node_load для каждого продукта в корзине. А это десятки запростов.

Все можно сделать одним:

$cid = (string) uc_cart_get_id();
$count = db_result(db_query("SELECT SUM(qty) FROM {uc_cart_products} WHERE cart_id = '%s'", $cid);


Опубликовано volocuga@drupal.org в чт, 02/09/2010 - 15:52.

О, я всегда пользовался способом с uc_cart_get_contents, но про кол-во запросов интересно

<?php
$cid 
= (string) uc_cart_get_id();
$count db_result(db_query("SELECT SUM(qty) FROM {uc_cart_products} WHERE cart_id = '%s'"$cid);
?>

Сюда бы ещё JOIN, чтобы брать сразу и сумму корзины :)


Опубликовано Обухов Никита в пт, 03/09/2010 - 08:46.

ну если есть атрибуты, влияющие на цену, то джойном не обойтись)


Опубликовано kazah в пт, 03/09/2010 - 11:31.

Подскажите, а если нет атрибутов у товара, как вывести итоговую сумму (цену)?

И еще один вопрос...как сделать если срабатывает свойство overflow у div, то ширина одна, а если не срабатывает, то другая!?

Извиняюсь за наглость...:)


Опубликовано orangeudav в пт, 03/09/2010 - 11:53.

и не только аттрибуты, а также модули-модификаторы цены


Опубликовано ddj в пт, 03/09/2010 - 16:53.

Уважаемые спецы, всем спасибо за советы. Как видим, возможностей тут куча ;-)


Опубликовано kazah в пт, 03/09/2010 - 17:04.

ну кто-нить подскажет???


Опубликовано orangeudav в сб, 04/09/2010 - 06:13.

подскажет что? надо пользоваться уберкартовскими функциями - тогда все будет правильно


Опубликовано kazah в сб, 04/09/2010 - 15:13.

я извиняюсь за наглость но ВЫ такой умный!! А если необходимо вывести в отдельный блок ( с помощью views) еще не завершенный заказ... а только то что покупатель заказал в корзине...на странице checkout! как раз там и нужно вывести общую сумму корзины...и цену каждой модели товара в отдельности (с учетом кол-ва)?? КАК ЭТО СДЕЛАТЬ ИСПОЛЬЗУЯ БАЗУ??


Опубликовано volocuga@drupal.org в сб, 04/09/2010 - 15:44.

"kazah" написал(а):

А если необходимо вывести в отдельный блок ( с помощью views)

Ответ в вопросе: это можно сделать видами, толь поставить ещё uc_views


Опубликовано kazah в сб, 04/09/2010 - 20:48.

uc_views - можно вывести законченные заказы...а заказы еще не законченные нельзя...ну или я чет не доглядел...но по мне так нельзя...а особенно с помощью views нельзя вывести кнопку checkout! Или я не прав?


Опубликовано orangeudav в вс, 05/09/2010 - 07:18.

что мешает открыть исходники uc_cart и посмотреть куда и как сохраняются выбранные товары?
точнее сохраняются то они в таблицу uc_cart_products, а вот идентификатор корзины крнкретного пользователя совпадает с uid для зарегестрированных пользователей (uc_cart_get_id)

но обращаться напряму к таблице - это неправильно, надо использовать функции. и пофик что оно там загружает ноды целиком.

саму кнопку checkout можно имитировать ссылкой + ccs, либо найти форму в которой есть только кнопка checkout (или взять другую форму и выкинуть все лишнее unset'ом) а потом вывести ее куда угодно через drupal_get_form()


Опубликовано kazah в вс, 05/09/2010 - 08:24.

а если заказ оформляет незарегистррированный пользователь?

на самом деле, хотел узнать...возможно ли вывести собственый расчет (если пользователь выбирает товар и кол-во, допустим, 2 шт., выводить цену товара помноженную на кол-во) и все это сделать с помощью views...т.е. выводить sell_price*qty? Это реально?


Опубликовано orangeudav в вс, 05/09/2010 - 09:07.

если незареганый пользователь то у него cart_id вычисляется как md5(ололо) и тоже сохраняется в таблицу

я честно говоря не понимаю зачем вам вообще views, вам же надо сделать где то в углу сайта типа "Вы выбрали товара уже на XXX рублей" ? ну так и сделайте php-блок например в котором считать как сказал Stutzer


Опубликовано kazah в вс, 05/09/2010 - 09:29.

там считает только кол-во товаров...а мне надо вывести сумму!!


Опубликовано Обухов Никита в вт, 07/09/2010 - 11:40.

ну так умножьте кол-во на цену

<?php
$items 
uc_cart_get_contents();
$item_price 0;
foreach (
$items as $item$item_price += ($item->qty $item->price);
?>


Опубликовано kazah в вт, 07/09/2010 - 14:43.

Спасибо! Я просто не особо php-развитый!:))

Подскажите, а как вывести цену отдельного товара...т.е. цену товара умноженную на кол-во!

Я просто пытаюсь использовать views на странице checkout вместо стандартного вывода уберкарта! Если использовать код выше то он просто выводит итоговую сумму...а как подогнать для отдельно взятого товара?

Спасибо!


Опубликовано volocuga@drupal.org в вт, 07/09/2010 - 18:28.

"kazah" написал(а):

uc_views - можно вывести законченные заказы...а заказы еще не законченные нельзя...

Ваша неправда. Выводит даже те товары, которые попали на страницу чекаута. Там есть поле "Состояние заказа"


Опубликовано kazah в вт, 07/09/2010 - 19:16.

Я проверил уже в пятый раз...выбрав поле в фильтрах order status: in checkout (состояние заказа: чекаут) - отображаються товары которые были завершенны (то есть пользователь их отправил админу грубо говоря), а так чтобы после корзины просмотреть свои заказы на странице checkout нельзя!!

Или есть другие способы?


Опубликовано volocuga@drupal.org в пт, 10/09/2010 - 16:31.

Вот только что посмотрел свою вьюху. У меня фильтр развёрнутый, но я думаю не суть важно

Выводится корректно любое состояние и in checkout в том числе

Вы наверное несколько неправильно понимаете in checkout

Состояние in checkout наступает тогда, когда юзер заполнил свои данные и как минимум прошёл сюда cart/checkout/review


Опубликовано kazah в сб, 11/09/2010 - 06:16.

Я все прекрасно понимаю...но я делаю сайт без страницы ревью! Возможно можно как то обойти эти сложности....я использую также модуль uc_webform, который создает опросник на странице checkout!! Как сделать?? Извиняюсь если грубо пишу..:))


Опубликовано Goodseeker в пн, 11/10/2010 - 00:17.

Есть модуль Microcart Block который выводит цену и количество в корзине.

Как в нем сделать, чтоы выводил русским словом "Количество", а не "Items"?


Опубликовано volocuga@drupal.org в пн, 11/10/2010 - 00:26.

"Goodseeker" написал(а):

Есть модуль Microcart Block

Гы, модуль на такой чих. Куда катится мир


Опубликовано Goodseeker в вт, 19/10/2010 - 17:29.

volocuga@drupal.org написал(а):
"Goodseeker" написал(а):

Есть модуль Microcart Block

Гы, модуль на такой чих. Куда катится мир

Ну не знаю я php и sql.
А какой тогда для меня выход?


Новое на сайте

Ссылки партнёров