Jump to content
Sign in to follow this  
unkind

[Решено] Новое поле в 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" при каждой попытке сформировать заказ.

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

Share this post


Link to post
Share on other sites

в system/library/cart.php еще добавляйте в массив данных о товаре ваш isbn.

Share this post


Link to post
Share on other sites

в system/library/cart.php еще добавляйте в массив данных о товаре ваш isbn.

Спасибо! Ошибка исчезла. 

Share this post


Link to post
Share on other sites

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

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

Пример:

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

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

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

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

 

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

 

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

Share this post


Link to post
Share on other sites

ставишь varchar, в sql делаешь $this->db->escape($var) вместо (int)$var

Share this post


Link to post
Share on other sites

Да! Все получилось! 

afwollis, еще раз огромное спасибо!

Share this post


Link to post
Share on other sites

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

При создании заказа через 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 для этого файла?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

для редактирования заказа в админке надо писать много кода. в том числе и javascript.

Share this post


Link to post
Share on other sites

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

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

 

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

 

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

 

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.