Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Новое поле в order_product. Запись при создании и редактировании заказа.


Recommended Posts

Доброго времени суток!
ocStore 1.5.5.1.2

Помогите разобраться. Есть задача: сохранять некоторые поля (в частности поле isbn) из табл. Product в табл. Order_product при создании заказа.

 

Модель создания заказа стандартная.
Что сделал:
1. В табл. Order_product создал столбец isbn.
2. В файле catalog/model/checkout/order.php в функцию addOrder (в часть foreach ($data['products'] as $product) (у меня 9 строка)) добавил запись значения в соответствующий столбец (по аналогии с уже имеющимися) :

 isbn = '" . (int)$product['isbn'] . "'

Получилось :

foreach ($data['products'] as $product) { 
			$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', isbn = '" . (int)$product['isbn'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', purchase_price = '" . (int)$product['purchase_price'] . "', total = '" . (float)$product['total'] . "', tax = '" . (float)$product['tax'] . "', reward = '" . (int)$product['reward'] . "'");

До этого значение isbn выведено в карточку товара, поэтому в model/catalog/product.php и в controller/product/product.php все данные есть.

 

Внимание, как говорится, вопрос!

При формировании заказа, на предпоследнем шаге №5 выдает ошибку и не продолжает формирование заказ. В логах следующая ошибка:

Undefined index: isbn в файле catalog/model/checkout/order.php

 

Поискал по форуму, нашел, что якобы переменные передаются в catalog/model/checkout/order.php из файла catalog\controller\checkout\confirm.php.

В файле catalog\controller\checkout\confirm.php нашел:

$product_data = array();
		
			foreach ($this->cart->getProducts() as $product) {
...ТРА-ТА-ТА...
                          $product_data[] = array(
					'product_id' => $product['product_id'],
					'name'       => $product['name'],
					'model'      => $product['model'],

Т.к. в табл. Order_product изначально есть поле model, то сделал по аналогии: 

'isbn'      => $product['isbn'],

Теперь при оформлении заказа на томже этапе ошибка и в логах теперь:

Undefined index: isbn в файле catalog/controller/checkout/confirm.php

 

Обратил внимание, что в саму табл. Order_product, столбец isbn записываются "0" при каждой попытке сформировать заказ.

Подскажите где ошибка и в какую сторону копать? Уже голова взорвалась...

Надіслати
Поділитися на інших сайтах


Возникла другая проблема:

Новые данные (isbn и еще несколько полей) не записываются в таблицу order_product.Записываются только полностью числовые значения. Если в поле смешанное значение начинается с цифры, то записывается то записывается только цифра, если начинается с текста, то в поле записывается Ноль.

Пример:

1(2) час. - записывается 1

14(30) дн. - записывается 14

Продукт 1 - записывается 0

342493 - записывается полностью 342493.

 

Тип значения соответствующих столбцов в product и order_product одинаковые, выставлял и text и varchar - результата нет.

 

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

Надіслати
Поділитися на інших сайтах


Поторопился радоваться.

При создании заказа через front сайта доп. поля записываются в order_product - все ОК!

 

НО при создании заказа в админке ничего не пишется. А при редактировании уже имеющегося заказа(созданного через front сайта) все доп. данные заказа из таблицы order_product стираются. Остаются только штатные.

 

Что сделано:

admin/model/sale/order.php

в запрос внесения данных в БД добавил: isbn = '" . $this->db->escape($order_product['isbn']) . "'

public function addOrder($data) {
 ТРА-ТА-ТА....
  if (isset($data['order_product'])) {		
      		foreach ($data['order_product'] as $order_product) {	
      			$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', isbn = '" . $this->db->escape($order_product['isbn']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'");
			
				$order_product_id = $this->db->getLastId();
 

в этом же файле:

public function editOrder($order_id, $data) {
        ТРА-ТА-ТА...
         if (isset($data['order_product'])) {		
      		foreach ($data['order_product'] as $order_product) {	
      			$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_product_id = '" . (int)$order_product['order_product_id'] . "', order_id = '" . (int)$order_id . "', product_id = '" . (int)$order_product['product_id'] . "', isbn = '" . $this->db->escape($order_product['isbn']) . "', name = '" . $this->db->escape($order_product['name']) . "', model = '" . $this->db->escape($order_product['model']) . "', quantity = '" . (int)$order_product['quantity'] . "', price = '" . (float)$order_product['price'] . "', total = '" . (float)$order_product['total'] . "', tax = '" . (float)$order_product['tax'] . "', reward = '" . (int)$order_product['reward'] . "'");
			
				$order_product_id = $this->db->getLastId();
 

В файле admin/controller/sale/order.php везде где встречалось упоминание поля 'model' прописал по аналогии 'isbn'/

 

 

Но в итоге при работе с заказом из админки ничего не пишется в базу.

В логах ошибка:

Undefined index: isbn in ...admin\model\sale\order.php on line 212 (это как раз запрос в функции editOrder)

Где определить index для этого файла?

Надіслати
Поділитися на інших сайтах


В массиве $data ключ isbn отсутствует. В контроллере перед вызовом метода $this->model_sale_oder->editOrder().

Это навскидку.

Надіслати
Поділитися на інших сайтах

Кажется победил я эту систему :)

Все места в файлах каталога *Сайт*/admin/...(и контроллеры и модели и темплейты, а заодно и языковые) где встречается поле товара Модель по аналогии продублировал isbn (и остальные нужные поля продукта). Все равно в дальнейшем пригодятся, т.к. еще буду выводить и использовать их много где.

 

Копипаста оооочень много. 

 

Все работает. И при создании заказа через фронт сайта, и при добавлении заказа через админку, и при редактировании заказа в админке.

 

Огромное спасибо за помощь и советы!!!!!

Я думаю, тему можно закрыть.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.