Перейти к содержимому


Фотография
- - - - -

Изменить стоимость заказа

корзина заказ стоимость

Лучший Ответ firinmaxim , 16 June 2014 - 13:02

Все товарище, разобрался.

\media\zoo\applications\jbuniversal\framework\events\jbevent.item.php

перехватил сумму заказа и обработал соответствующие пользовательские поля.

Тема закрыта, всем спасибо)

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 10

#1 firinmaxim

firinmaxim

Отправлено 04 June 2014 - 18:47

Доброго времени суток.

Суть проблемы - необходимо реализовать добавление фиксированной суммы к общей стоимости заказа.

Подробнее...Если общая сумма заказа меньше 4000р., необходимо добавить к ней 300р. сверху. Если сумма заказа >= 4000р. ничего не делаем соответственно.

 

Сайт - http://www.twobike.ru/

Joomla: 3.2.3     JBZoo: 2.1.2 Pro     Zoo: 3.1.4

 

Изучил форум, пробовал самостоятельно, успехов не достиг к сожалению.

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

Чтобы я мог добавить, что-то вроде if ($summa < 4000) { $summa+= 300;}

 

Платежные системы не подключены. Мне необходимо отловить переменную стоимость заказа, обработать ее и чтобы она дальше пошла в создание заказа.

 

Задача вроде не сложная, но, к сожалению не смог с ней справится. Надеюсь на Вашу помощь.

 


  • 0

#2 Cheren-dow

Cheren-dow

Отправлено 04 June 2014 - 19:28

firinmaxim, здравствуйте. Посмотрите метод ajaxAddToCart в элементе JBPrice

сайт\media\zoo\applications\jbuniversal\elements\jbprice\jbprice.php

  • 1
Изображение
 

#3 firinmaxim

firinmaxim

Отправлено 04 June 2014 - 20:56

firinmaxim, здравствуйте. Посмотрите метод ajaxAddToCart в элементе JBPrice

сайт\media\zoo\applications\jbuniversal\elements\jbprice\jbprice.php

Спасибо за ответ.


 /**
     * Ajax add to cart method
     */
    public function ajaxAddToCart($quantity = 1, $priceIndex = 0)
    {
        if ($this->_isInStock()) {
            $price = $this->_getPriceByIndex((int)$priceIndex);

            $params = array(
                'priceIndex' => (int)$priceIndex,
                'quantity'   => (int)$quantity,
                'price'      => isset($price['value']) ? $price['value'] : '',
                'priceDesc'  => isset($price['description']) ? $price['description'] : '',
                'itemId'     => $this->getItem()->id,
                'currency'   => $this->_getCurrency(),
                'sku'        => ($this->get('sku') ? $this->get('sku') : $this->getItem()->id),
            );
            

            $this->app->jbcart->addItem($this->getItem(), $params);
        }

        $this->app->jbajax->send(array('basketUrl' => $this->_getBasketUrl()));
    }
 
Я так понимаю $params['price'] - это цена добавляемого товара?
А как мне получить актуальную общую стоимость всей корзины? и как проверить ее значение?
Подскажите, пожалуйста.

Сообщение отредактировал Cheren-dow: 05 June 2014 - 07:12

  • 0

#4 Cheren-dow

Cheren-dow

Отправлено 05 June 2014 - 07:16

Наверно сразу не понял. Если вы хотите при создании заказа в зависимости от общей суммы что то добавлять вам стоит посмотреть контроллер basket метод createOrder.

сайт\media\zoo\applications\jbuniversal\framework\controllers\basket.php

  • 1
Изображение
 

#5 firinmaxim

firinmaxim

Отправлено 05 June 2014 - 08:17

файл сайт\media\zoo\applications\jbuniversal\framework\controllers\basket.php

функция createOrder() (строка 213)

 

получаю стоимость заказа и обрабатываю

 

$order = JBModelOrder::model()->getDetails($item);

$totalPrice   = $order->getTotalPrice();

if ($totalPrice < 4000) { $totalPrice+= 300; }

 

Тут все отлично, теперь осталось сохранить это новое значение стоимости заказа.

Как это сделать, подскажите пожалуйста, ведь в заказ сейчас уходит все равно старая стоимость.


  • 0

#6 Cheren-dow

Cheren-dow

Отправлено 05 June 2014 - 09:43

Тут все отлично, теперь осталось сохранить это новое значение стоимости заказа. Как это сделать, подскажите пожалуйста, ведь в заказ сейчас уходит все равно старая стоимость.
 

Измените метод getTotalPrice в элементе jbbasketitems

сайт\media\zoo\applications\jbuniversal\elements\jbbasketitems\jbbasketitems.php

  • 0
Изображение
 

#7 firinmaxim

firinmaxim

Отправлено 05 June 2014 - 10:07

К сожалению не помогло...

Для теста изменил метод getTotalPrice в элементе jbbasketitems

/**
     * Get total price
     */
    public function getTotalPrice($isFormated = false)
    {
        
        return 10;

    }

в файл \media\zoo\applications\jbuniversal\framework\controllers\basket.php

функция функция createOrder() (строка 213)

$totalPrice   = $order->getTotalPrice(); попадает значение 10. Но, когда заказ создается. туда все равно отправляется старое значение общей стоимости корзины. 

 

Видимо нужно перехватить момент записи всего заказа и там переопределить это значение, вот только где это происходит не могу понять и как добраться до этой самой переменной...подскажите, пожалуйста.


  • 0

#8 SmetDenis

SmetDenis

Отправлено 05 June 2014 - 13:23

Есть разные места, которые отвечают за сумму заказа.
Они срабатывают в разные моменты.


Метод getTotalPrice в элементе jbbasketitems срабатывает при валидации оплаты
т.е когда робот заходит и проверят оплату
и сработает при ограничении на минимальную сумму заказа.


Здесь можно найти метод recount()
media\zoo\applications\jbuniversal\framework\helpers\jbcart.php
который отвечает за AJAX запросы при удалении, изменении кол-ва.


При создании заказа сумма не сохраняется.
Сохраняются данные по каждому товару, его кол-во, цену. Потом вычисляется сумма с помощью getTotalPrice
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#9 firinmaxim

firinmaxim

Отправлено 05 June 2014 - 14:01

Т.е. я правильно понимаю, что при сохранении материала (заказа), снова вычисляется сумма через getTotalPrice.

При создании электронного письма админу магазина и покупателю снова вычисляется сумма через getTotalPrice.

 

Может мне тогда будет проще создать в типе материала "Заказ" два поля.

1. Доставка - значение 300 если сумма заказа больше 4000р. и 0 иначе.

2. Итого к оплате - сумма общей стоимости заказа и доставки.

 

Тогда вопрос, как мне при сохранении материала типа "Заказ" в файле

\media\zoo\applications\jbuniversal\framework\events\jbevent.item.php saved()

опять вычислить общую стоимость заказа через getTotalPrice, чтобы я смог сравнить ее с 4000р. и присвоить соответствующие значения моим новым полям "Доставка", "Итого к оплате" и благополучно все это сохранить.

Что-то вроде этого:

$dostavka = 0;
$itogo = 0;
$item = $event->getSubject(); // получаем объект сохраняемого материала

// как-то получаем стоимость заказа
$summa = getTotalPrice();

if ($summa < 4000){ $dostavka = 300; }

$itogi = $summa + $dostavka;

$item->getElement('<ELEMENT_ID_Доставка>')->bindData(array(
array('value' => $dostavka)
));

$item->getElement('<ELEMENT_ID_ИтогоКОплате>')->bindData(array(
array('value' => $itogo)
));

Может есть более рациональный путь решения моей проблемы...

У меня нет платежных шлюзов.

Заказ создается через форму подачи материалов, покупателю отправляется письмо, админ смотрит через админку этот заказ.

Нужно, чтобы у обоих была информация о том, что, если сумма заказа меньше 4000, добавляется 300р. к оплате. Подскажите пожалуйста.


Сообщение отредактировал firinmaxim: 05 June 2014 - 14:10

  • 0

#10 Евгения

Евгения

Отправлено 16 June 2014 - 12:24

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


  • 0

"Это бессмысленно" - сказал разум. "Это нелепо" - заметил опыт. "Это бесполезно" - отрезал здравый смысл. "О! Вот так нормально!" - обрадовался клиент.

Что, где лежит (тема-сборник про пути к файлам)






Темы с аналогичным тегами корзина, заказ, стоимость

Click to return to top of page in style!