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

Тема в разделе "Общие вопросы", создана пользователем Иван Николаев, 3 дек 2022.

  1. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Всем привет!

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

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

    karpov Продвинутый пользователь

    Сообщения:
    1.519
    Симпатии:
    241
    1. Нет, не обязательно.
    2. Доступ к методам апи со стороны, обычно из админ панели при редактировании заказа.
     
    Иван Николаев нравится это.
  3. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Т.е. по факту мне нужны файлы только?
    /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
     
  4. Ravilr

    Ravilr Специалист

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

    Ну и вообще, нужно подходить к вопросу "зачем", а не "как". Например, зачем добавлять в бд поле 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. Иван Николаев

    Иван Николаев Пользователь

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

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

    Ravilr Специалист

    Сообщения:
    3.878
    Симпатии:
    1.064