Jump to content


Photo
- - - - -

id товара в корзине и event


Best Answer SmetDenis , 26 February 2015 - 10:55

насколько я понимаю, $orderId - это значение поля id в таблице zoo_item, где в строке с данными заказа поля Elements хранятся id товаров. А как мне получить это самое "$orderId = 42"? 

 

Прошу прощения за долгий ответ.

 

В файле \jbuniversal\framework\events\jbevent.payment.php роль созданного заказа играет переменная

$item = $params['item'];

 

Этот объект передается как аргумент события. Т.е $orderId = $item->id;

 

И что именно возвращает $items ?
 

Это список товаров, которые были в корзине.

 

И товары и заказы хранятся в таблице zoo_items, разница лишь в том как используются эти материалы (поля, настройки итд).

Go to the full post


  • This topic is locked This topic is locked
9 replies to this topic

#1 snserg

snserg
  • JBZoo User (rus)
  • User rate: 0
  • posts: 48
  • topics: 7

Posted 19 February 2015 - 11:53

Добрый день. Есть пара вопросов по корзине. 

 

1. Какое событие отвечает за успешно оплаченную через платежную систему покупку товара?

2. Где в сессии хранится id купленных товаров?


  • 0

#2 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 21 February 2015 - 11:01

1. Какое событие отвечает за успешно оплаченную через платежную систему покупку товара?


Событие называется "payment:callback", можно подключится к ней через API,

либо дописать свое внутри функция callback()
\jbuniversal\framework\events\jbevent.payment.php

2. Где в сессии хранится id купленных товаров?

Товары в сессии хранятся только до создания заказа.
$this->app-jbcart->getAllItems()
Если вы говорите о заказе после его создания, то примерно так
$orderId = 42;
$orderModel = JBModelOrder::model();
$order = $orderModel->getById($orderId);
$items = $orderModel->getDetails($order)->data();

  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



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


#3 snserg

snserg
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 48
  • topics: 7

Posted 24 February 2015 - 12:54

насколько я понимаю, $orderId - это значение поля id в таблице zoo_item, где в строке с данными заказа поля Elements хранятся id товаров. А как мне получить это самое "$orderId = 42"?  И что именно возвращает $items ?


  • 0

#4 snserg

snserg
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 48
  • topics: 7

Posted 26 February 2015 - 10:21

я все еще жду ответа...


  • 0

#5 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 26 February 2015 - 10:55   Best Answer

насколько я понимаю, $orderId - это значение поля id в таблице zoo_item, где в строке с данными заказа поля Elements хранятся id товаров. А как мне получить это самое "$orderId = 42"? 

 

Прошу прощения за долгий ответ.

 

В файле \jbuniversal\framework\events\jbevent.payment.php роль созданного заказа играет переменная

$item = $params['item'];

 

Этот объект передается как аргумент события. Т.е $orderId = $item->id;

 

И что именно возвращает $items ?
 

Это список товаров, которые были в корзине.

 

И товары и заказы хранятся в таблице zoo_items, разница лишь в том как используются эти материалы (поля, настройки итд).


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



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


#6 snserg

snserg
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 48
  • topics: 7

Posted 26 February 2015 - 11:11

итак, подытожим...

 $item      = $params['item'];      
 $orderId = $item->id;
 $orderModel = JBModelOrder::model();
 $order = $orderModel->getById($orderId);
 $items = $orderModel->getDetails($order)->data();

получаем $items - массив с данными заказа, откуда извлекаем itemId и quantity.

 

 

скажите а как мне проверить работоспособность этой конструкции без регистрации в робокассе?

 

или если перефразировать, как вызвать событие jbevent.payment.php вручную? 


  • 0

#7 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 26 February 2015 - 11:48

Конечно лучше воспользоваться режимом отладки робокассы.

 

или если перефразировать, как вызвать событие jbevent.payment.php вручную? 

 

<?php
$orderId = 'номер существующего заказа';
$orderModel = JBModelOrder::model();
$order = $orderModel->getById($orderId);
$orderDetails = $orderModel->getDetails($order);
$orderDetails->callback('paymentCallback', array( // вызов колбека оплаты, который вызовет событие оплаты payment:callback
    'date'   => '2015-02-26',
    'system' => 'Robokassa.ru',
));

Это заставит выполнится функцию

jbuniversal\elements\jbbasketitems\jbbasketitems.php paymentCallback(), которая сохраняет информацию об оплате в заказ, меняет статус и затем вызывает payment:callback

 

Либо альтеративный вариант

$orderId = 'номер существующего заказа';
$orderModel = JBModelOrder::model();
$order = $orderModel->getById($orderId);
$this->app->event->dispatcher->notify($this->app->event->create($item, 'payment:callback', array(
    'item'      => $order,
    'appParams' => $item->getApplication()->getParams()
)));

 

По большому счету, код можно выполнить где угодно.

Учтите что сработает он один раз, т.к там стоит проверка на статус заказа (чтобы не оплатить оплаченный заказ снова).


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



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


#8 snserg

snserg
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 48
  • topics: 7

Posted 26 February 2015 - 13:19

не выходит..

 

отдельный файл, вызываемый в модуле 

<?php
    class ModelOrder  {
        public function index()
        {
            $orderId = 379;
     
            $orderModel = JBModelOrder::model();
            $order = $orderModel->getById($orderId);
            print_r($order);
            
$this->app->event->dispatcher->notify($this->app->event->create($item, 'payment:callback', array('item'=> $order,'appParams' => $item->getApplication()->getParams())));
    }
}
    
?>

не вызывается (print_r ничего не выводит). Не подскажите что не так?


  • 0

#9 SmetDenis

SmetDenis
  • Administrators
  • User rate: 139.4
  • posts: 16232
  • topics: 200

Posted 26 February 2015 - 13:27

Каким образом вызывается этот класс?

Как подключается? Где он вызывается?

 

Под "любым местом" я имел ввиду код, который работает вместе с кодом сайта (шаблон или контроллер, например).

 

Если вам нужно отдельное "любое место" для теста, то попробуйте сделать так

Добавьте файл  media\zoo\applications\jbuniversal\framework\controllers\test.php

<?php
/**
* Class BasketJBUniversalController
*/
class testJBUniversalController extends JBUniversalController
{
    function index()
    {
        print_r(1);
    }
}

для запуска - перейти по ссылке

<ВАШ_САЙТ>/index.php?option=com_zoo&controller=test&task=index

Это сложный, но наиболее красивый вариант для тестирования.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



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


#10 snserg

snserg
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 48
  • topics: 7

Posted 27 February 2015 - 05:05

получилось сделать через контроллер. Спасибо!


  • 0




Click to return to top of page in style!