На форуме 9558 тем, 76452 сообщений, 44664 участников
тема · 1 313 просмотров · 5 ответов

[РЕШЕНО] Добавить поле sku в order_product Opencart/OcStore 3.x

Общие вопросы
читают: 0 участников и 1 гость
порядок
3 дек 2022 16:13#1
Всем привет!

Задача при оформлении заказа, у товара поле sku добавилось в бд. Поле sku в таблице order_product создано.

Разбираюсь с файлами и есть несколько вопросов:
1. Нужно ли обязательно выводить sku в пользовательской части магазина, чтобы данные записывались в бд?
2. Для чего нужен файл /catalog/controller/api/cart.php?
3 дек 2022 18:31#2
1. Нет, не обязательно.
2. Доступ к методам апи со стороны, обычно из админ панели при редактировании заказа.
3 дек 2022 21:27#3
karpov написал(а): ↑1. Нет, не обязательно.
2. Доступ к методам апи со стороны, обычно из админ панели при редактировании заказа.

Т.е. по факту мне нужны файлы только?
/catalog/controller/checkout/confirm.php
/catalog/model/checkout/order.php


Нужны ли файлы?
/catalog/controller/api/order.php
/catalog/controller/api/cart.php
/catalog/controller/checkout/order.php
5 дек 2022 10:32#4
Иван Николаев написал(а): ↑Нужны ли файлы?

Почему Вы спрашиваете, а нужно ли то или это? На данный момент не сложно проследить путь прохождения данных.

Ну и вообще, нужно подходить к вопросу "зачем", а не "как". Например, зачем добавлять в бд поле sku, если оно уже присутствует изначально в бд и оно не изменяемое с витрины? А поэтому достаточно просто поменять контроллер в плане выборки и просто добавить sku в выборку, например в том случаи если нужно просто вывести информацию где то.

А вот записывать в БД в таблицу order_product нужно тогда, когда это поле в будущем может измениться, например в поле записана имя менеджера, который продал товар. Тогда да.

И тут давайте посмотрим, как идут данные и лучше наверно от обратного.

\catalog\model\checkout\order.php

тут видим public function addOrder($data) {

и то что в таблицу order_product добавляется все что пришло из $data

Хорошо, идем на уровень ниже, где используется addOrder

Находим \catalog\controller\checkout\confirm.php

там видим,
php
$this->model_checkout_order->addOrder($order_data);

и смотрим, что по коду в $order_data
а там формируется массив данных... смотрим внимательно выше и находим что то с товарами
php
foreach ($this->cart->getProducts() as $product) {


Понимаем, что тут без библиотеки cart не обойтись. Ну идем туда
\system\library\cart\cart.php

смотрим на getProducts

и видим что формируется опять массив данных с товарами из БД запросом
php
$product_query = $this->db->query("SELECT * FROM "


на основе того, что лежит в корзине, в данном варианте в таблице БД
php
$cart_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "cart


И далее, подготавливается массив в конце $product_data[] = array(

и как раз там и формируются данные, которые и в итоге уходят в запись, типа
php
'length_class_id' => $product_query->row['length_class_id'],


И вот тут мы понимаем, что подготовлено в корзине, т.е в массиве из getProducts

то в итоге и попадает в addOrder($data) и тем самым можно будет использовать в изменении запроса
php
$this->db->query("INSERT INTO " . DB_PREFIX . "order_product
5 дек 2022 17:08#5
Ravilr написал(а): ↑На данный момент не сложно проследить путь прохождения данных.

Без Вашей помощи на самом деле было сложно, я как раз не додумался рассматривать корзину (\system\library\cart\cart.php) да и смотрю придётся еще добавлять информацию в checkout.

@Ravilr, подскажите пожалуйста, если я захочу создать поле manager в таблице order_data
То в модели будет так: manager = '" . $this->db->escape($product['sku']
В контролере: 'manager' => $product['sku'],
в корзине: 'manager' => $product_query->row['sku'],
сообщения 1–6 из 6
Чтобы ответить, войдите или зарегистрируйтесь.

Похожие темы