Перейти к содержанию
unkind

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

Рекомендуемые сообщения

Доброго времени суток!
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" при каждой попытке сформировать заказ.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Пример:

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

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

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

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

При создании заказа через 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().

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.