[РЕШЕНО] Вывод SKU в список заказов Opencart/OcStore 3.x

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

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

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

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

    Подскажите как вывести SKU товара в список заказов order_list.tpl. Все форумы пересмотрел, так и не нашёл ответа на свой вопрос.

    Большое спасибо!

    Opencart/OcStore 3.x

    e42052dc3c.jpg
     
    Последнее редактирование: 6 июл 2022
  2. karpov

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

    Сообщения:
    1.519
    Симпатии:
    241
  3. Иван Николаев

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

    Сообщения:
    108
    Симпатии:
    7
    Не то. Там отображение в других местах. Я нигде не могу найти чтобы SKU отображалось именно в списке заказов order_list.tpl, а там в истории самого заказа order_info.tpl

    @mars1an, здравствуйте. Может Вы подскажете?
     
    Последнее редактирование: 4 июл 2022
  4. SBNation - Накрутчик сообщений

    SBNation - Накрутчик сообщений Новичок

    Сообщения:
    13
    Симпатии:
    0
    Параметры задайте для отображения.
     
  5. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    В данном списке заказов нет перечня товаров, а значит нет sku.
    Для отображения sku, нужно для начала вывести все товары.
     
  6. Иван Николаев

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

    Сообщения:
    108
    Симпатии:
    7
    Я понимаю, но не могу разобраться как мне это сделать.
     
  7. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Если вы не владеете навыками, то никак. Вы же не предлагаете все сделать за вас? По указанной ссылке выше очень много информации как сделать и понять работу.
     
  8. Иван Николаев

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

    Сообщения:
    108
    Симпатии:
    7
    Не предлагаю) Прошу направить меня на путь ))) По ссылке я уже всё понял и всё реализовал. В контролере order для страницы order_list вообще не доступен вывод информации о товаре(
     
  9. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Вам нужно подсмотреть как в контроллере \catalog\controller\account\order.php начиная с public function info() {
    получают информацию по заказу и проделать все тоже самое, но для части index
    при этом учесть, что нужно добавить в массиив $data['orders'][] = array(
    а не просто отдельным массивом.
     
  10. mars1an

    mars1an Специалист

    Сообщения:
    629
    Симпатии:
    516
    Можно и сюда, конечно, вывести артикула, но а если в заказе 10 - 20 или больше позиций или артикула длинные?
    Вот код ocmod'a, выводит колонку с артикулами товаров в заказе через запятую. Не проверял:
    Код:
        <file path="catalog/controller/account/order.php">
            <operation>
                <search><![CDATA[$data['orders'][] = array(]]></search>
                <add position="before"><![CDATA[
                $products = $this->model_account_order->getOrderProducts($result['order_id']);
    
                $sku_list = [];
                foreach ($products as $product) {
                    $product_info = $this->model_catalog_product->getProduct($product['product_id']);
                    if ($product_info['sku']) {
                        $sku_list[] = $product_info['sku'];
                    }
                }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[$data['orders'][] = array(]]></search>
                <add position="after"><![CDATA[                'sku_list'   => implode(', ', $sku_list),]]></add>
            </operation>
            <operation>
                <search><![CDATA[$data['orders'] = array();]]></search>
                <add position="after"><![CDATA[        $this->load->model('catalog/product');]]></add>
            </operation>
        </file>
    
        <file path="catalog/view/theme/*/template/account/order_list.twig">
            <operation>
                <search><![CDATA[<td class="text-right">{{ column_product }}</td>]]></search>
                <add position="after"><![CDATA[              <td class="text-left">{{ column_sku_list }}</td>]]></add>
            </operation>
            <operation>
                <search><![CDATA[<td class="text-right">{{ order.products }}</td>]]></search>
                <add position="after"><![CDATA[              <td class="text-right">{{ order.sku_list }}</td>]]></add>
            </operation>
        </file>
    
        <file path="catalog/language/ru*/account/order.php">
            <operation>
                <search><![CDATA[$_['column_model']]]></search>
                <add position="before"><![CDATA[$_['column_sku_list']         = 'Список артикулов';]]></add>
            </operation>
        </file>
    
        <file path="catalog/language/en*/account/order.php">
            <operation>
                <search><![CDATA[$_['column_model']]]></search>
                <add position="before"><![CDATA[$_['column_sku_list']         = 'SKU List';]]></add>
            </operation>
        </file>
     
    Tom, Иван Николаев и Ravilr нравится это.
  11. Blast

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

    Сообщения:
    212
    Симпатии:
    74
    вариант с выборкой артикулов сразу из базы
    Код:
        <file path="catalog/model/account/order.php">
            <operation>
                <search><![CDATA[$query = $this->db->query("SELECT o.order_id, o.firstname, o.lastname]]></search>
                <add position="replace"><![CDATA[//$query = $this->db->query("SELECT o.order_id, o.firstname, o.lastname]]></add>
            </operation>
            <operation>
                <search><![CDATA[$query = $this->db->query("SELECT o.order_id, o.firstname, o.lastname]]></search>
                <add position="after"><![CDATA[
                    $query = $this->db->query("SELECT o.order_id, o.firstname, o.lastname, os.name as status, o.date_added, o.total, o.currency_code, o.currency_value, GROUP_CONCAT(IF(LENGTH(p.sku), p.sku, NULL)) as sku
                        FROM `" . DB_PREFIX . "order` o
                        LEFT JOIN " . DB_PREFIX . "order_status os ON (o.order_status_id = os.order_status_id)
                        LEFT JOIN " . DB_PREFIX . "order_product op ON o.order_id = op.order_id
                        LEFT JOIN " . DB_PREFIX . "product p ON op.product_id = p.product_id
                        WHERE o.customer_id = '" . (int)$this->customer->getId() . "' AND o.order_status_id > '0' AND o.store_id = '" . (int)$this->config->get('config_store_id') . "' AND os.language_id = '" . (int)$this->config->get('config_language_id') . "'
                        GROUP BY o.order_id
                        ORDER BY o.order_id DESC LIMIT " . (int)$start . "," . (int)$limit);
                ]]></add>
            </operation>
        </file> 
        <file path="catalog/controller/account/order.php">
            <operation>
                <search><![CDATA[$data['orders'][] = array(]]></search>
                <add position="after"><![CDATA[                'sku_list'   => $result['sku'],]]></add>
            </operation>
        </file>
    
        <file path="catalog/view/theme/*/template/account/order_list.twig">
            <operation>
                <search><![CDATA[<td class="text-right">{{ column_product }}</td>]]></search>
                <add position="after"><![CDATA[              <td class="text-left">{{ column_sku_list }}</td>]]></add>
            </operation>
            <operation>
                <search><![CDATA[<td class="text-right">{{ order.products }}</td>]]></search>
                <add position="after"><![CDATA[              <td class="text-right">{{ order.sku_list }}</td>]]></add>
            </operation>
        </file>
    
        <file path="catalog/language/ru*/account/order.php">
            <operation>
                <search><![CDATA[$_['column_model']]]></search>
                <add position="before"><![CDATA[$_['column_sku_list']         = 'Список артикулов';]]></add>
            </operation>
        </file>
    
        <file path="catalog/language/en*/account/order.php">
            <operation>
                <search><![CDATA[$_['column_model']]]></search>
                <add position="before"><![CDATA[$_['column_sku_list']         = 'SKU List';]]></add>
            </operation>
        </file>
    Если товаров будет много, то вызов нескольких десятков getProduct наверняка затормозит
     
    Tom и Иван Николаев нравится это.
  12. Иван Николаев

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

    Сообщения:
    108
    Симпатии:
    7
    Не работает.
    Немножко исправил, но не работает всё равно (
    Код:
        <file path="catalog/controller/account/order.php">
            <operation>
                <search><![CDATA[$data['orders'][] = array(]]></search>
                <add position="before"><![CDATA[
    //            $products = $this->model_account_order->getOrderProducts($result['order_id']);
                $products = $this->model_account_order->getOrderProducts($this->request->get['order_id']);
    
                $sku_list = [];
                foreach ($products as $product) {
                    $product_info = $this->model_catalog_product->getProduct($product['product_id']);
                    if ($product_info['sku']) {
                        $sku_list[] = $product_info['sku'];
                    }
                }
                ]]></add>
            </operation>
            <operation>
                <search><![CDATA[$data['orders'][] = array(]]></search>
                <add position="after"><![CDATA[                'sku_list'   => implode(', ', $sku_list),]]></add>
            </operation>
            <operation>
                <search><![CDATA[$data['orders'] = array();]]></search>
                <add position="after"><![CDATA[        $this->load->model('catalog/product');]]></add>
            </operation>
        </file>
    Потому что ругается на $products = $this->model_account_order->getOrderProducts($result['order_id']);
    Код:
    Fatal error: Uncaught Error: Call to a member function getProduct() on null
    и если после $data['orders'] = array(); я добавляю $this->load->model('catalog/product'); ругается на знак препинания
     
  13. Иван Николаев

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

    Сообщения:
    108
    Симпатии:
    7
    Работает. Спасибо большое.