Jump to content


Photo
- - - - -

Как получить данные заказа при оформлении заказа в корзине

корзина заказ

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

#1 usersJbzoo

usersJbzoo
  • JBZoo User (rus)
  • User rate: 2.5
  • posts: 201
  • topics: 39

Posted 01 October 2016 - 07:34

Добрый день!

Хотим создать программно материал из данных заказа. Т.е. при оформлении заказа в корзине, после нажатия на кнопку "создать и оплатить" до создания заказа (до формирования order, а order не создавать) как программно получить данные из заказа?


  • 0

#2 SmetDenis

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

Posted 03 October 2016 - 07:59

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

 

В элементе самый важный метод - notify().

 

Информацию о заказа в элементе легко получить через $this->getOrder()

А далее нужные элементы и информацию о нем Смотрите класс JBCartOrder 

 

Все элементы работают одинаково, поэтому приницп можно посмотреть тут

http://forum.jbzoo.c...nt-v-jbzoo-220/

http://jbzoo.ru/blog...iscount-element

http://forum.jbzoo.c...-jbmarketplace/

http://forum.jbzoo.c...oo-jbmarketpla/


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



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


#3 usersJbzoo

usersJbzoo
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 2.5
  • posts: 201
  • topics: 39

Posted 08 October 2016 - 18:17

В файле../media/zoo/applications/jbuniversal/framework/controllers/basket.php 

 

Как лучше получить доступ к значению элементов из $this->order, например, для ФИО:

$this->order->getFieldElement('fd18681e-38cd-47b5-8236-f075d51ee6fe')->data(); - возвращает value=Null - значит нужно глубже копать?


  • 0

#4 Cheren-dow

Cheren-dow
  • JBZoo User (rus)
  • User rate: 95.7
  • posts: 5060
  • topics: 31

Posted 09 October 2016 - 14:19

fd18681e-38cd-47b5-8236-f075d51ee6fe

Вы правильно указали id элемента? 


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

#5 usersJbzoo

usersJbzoo
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 2.5
  • posts: 201
  • topics: 39

Posted 09 October 2016 - 16:41

Да, jbdump($this->order->getFields()); выводит:

  • 283f8a1e-979d-45c2-b9af-70ffb9397708 (NULL)
  • 5e48cf04-2731-4673-91ff-037bd4d642db (NULL)
  • 73080170-c58c-4026-bd4a-9a12dfa9141a (NULL)
  • 749b1b67-3bae-48a5-803f-4e6c33df6ec4 (NULL)
  • fd18681e-38cd-47b5-8236-f075d51ee6fe (NULL)
  • <! methods of "JSONData" !> (Array, 35)
как из них данные прочитать?

  • 0

#6 usersJbzoo

usersJbzoo
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 2.5
  • posts: 201
  • topics: 39

Posted 10 October 2016 - 06:33

код вставляю в этом месте:

 } else {
               //   jbdump($this->order->getFields());
               jbdump($this->order->getFieldElement('fd18681e-38cd-47b5-8236-f075d51ee6fe')->data());
                    // saving order
                    JBModelOrder::model()->save($this->order);
                    $orderSaved = true;

                    // empty cart items
                    $this->cart->removeItems();

я понимаю, что данные в модель order уже внесены, как проще их читать?


  • 0

#7 SmetDenis

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

Posted 10 October 2016 - 08:26

В файле../media/zoo/applications/jbuniversal/framework/controllers/basket.php 

Зачем вам менять файл контроллера корзины.

 

Посмотрите принцип любого модификатора цены. Вам

jbuniversal\jbuniversal\cart-elements\hook\

 

Вам нужен метод notify() и все действия провести в нем.

 

Скорее всего вы дампите в контроллере совершенно не тот объект, либо он еще не был скомпонован нужными элементами и свойствами.


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



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


#8 usersJbzoo

usersJbzoo
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 2.5
  • posts: 201
  • topics: 39

Posted 10 October 2016 - 08:52

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

Здесь создается заказ, правильно понимаю?:

JBModelOrder::model()->save($this->order);

Почему же он ($this->order) здесь не скомпонован, если передается для создания Заказа?


  • 0

#9 SmetDenis

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

Posted 11 October 2016 - 18:55

Такое поведение обычно прерывают исключениями. Ну да ладно.

 

$this->order->getFieldElement('fd18681e-38cd-47b5-8236-f075d51ee6fe')->data(); 
 

Этот код правильный. Должен без проблем работать и вернуться массив.

 

Альтернативный вариант - (string)$order->getFields() и получится JSON


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



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


#10 usersJbzoo

usersJbzoo
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 2.5
  • posts: 201
  • topics: 39

Posted 13 October 2016 - 06:29

Согласны, что некрасиво контроллер "ломать". Если можно, сориентируйте нас, про "прерывание исключениями".

 

Подскажите, как при создании материала, используя модели JBZoo, заполнить Категорию и Основную категорию?

или здесь, необходимо, после создания материала, в объект требуемой Категории добавлять ссылку на ид материала (в item_ids)?


Edited by Chester1988, 13 October 2016 - 07:08.

  • 0





Also tagged with one or more of these keywords: корзина, заказ

Click to return to top of page in style!