Показать все изображения и названия продуктов на странице истории заказов в opencart 3

Я хочу показать сведения о продукте/получить все имена изображений продуктов внутри заказа в истории заказов, чтобы добиться того же самого. Я вставил свой код в цикл результатов, как и приведенный ниже код, но он извлекает только один продукт, и этот же продукт виден к каждому заказу.

1.каталог/контроллер/аккаунт/order.php

public function index() {
...
foreach ($results as $result) {
...

//for product for loop

            $order_info = $this->model_account_order->getOrder($result['order_id']);

            if ($order_info) {
            $this->load->model('catalog/product');
            $this->load->model('tool/upload');



            // Products


            $data['products'] = array();

            $products = $this->model_account_order->getOrderProducts($result['order_id']);

            foreach ($products as $product) {
                $option_data = array();

                $options = $this->model_account_order->getOrderOptions($result['order_id'], $product['order_product_id']);

                foreach ($options as $option) {
                    if ($option['type'] != 'file') {
                        $value = $option['value'];
                    } else {
                        $upload_info = $this->model_tool_upload->getUploadByCode($option['value']);

                        if ($upload_info) {
                            $value = $upload_info['name'];
                        } else {
                            $value = '';
                        }
                    }

                    $option_data[] = array(
                        'name'  => $option['name'],
                        'value' => (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value)
                    );
                }

                $product_info = $this->model_catalog_product->getProduct($product['product_id']);

                if ($product_info) {
                    $reorder = $this->url->link('account/order/reorder', 'order_id=' . $result['order_id'] . '&order_product_id=' . $product['order_product_id'], true);
                } else {
                    $reorder = '';
                }

                $data['products'][] = array(
                    'name'     => $product['name'],
                    'model'    => $product['model'],
                    'option'   => $option_data,
                    'quantity' => $product['quantity'],
                    'price'    => $this->currency->format($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0), $order_info['currency_code'], $order_info['currency_value']),
                    'total'    => $this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value']),
                    'reorder'  => $reorder,
                    'return'   => $this->url->link('account/return/add', 'order_id=' . $result['order_id'] . '&product_id=' . $product['product_id'], true)
                );

                // Totals
                $data['totals'] = array();

                $totals = $this->model_account_order->getOrderTotals($result['order_id']);

                    foreach ($totals as $total) {
                    $data['totals'][] = array(
                        'title' => $total['title'],
                        'text'  => $this->currency->format($total['value'], $order_info['currency_code'], $order_info['currency_value']),
                    );
                }




            }

            //end for loop of product
            }
}
  1. order-list.twig СКРИНШОТ ЗДЕСЬ:

введите здесь описание изображения

  1. Главная страница (История заказов) СКРИНШОТ:

введите здесь описание изображения


person Prosenjeet Paul    schedule 19.02.2019    source источник


Ответы (1)


Проблема в вашем цикле. Вы прикрепляете продукт к $data['products'], когда вы должны прикреплять его к $data['orders']['products']

  1. в вашем коде переименуйте переменную
    $data['products']

to

    $order_products
  1. затем добавьте это в массив заказов
    $data['orders'][] = array(
        ...
        'order_products' => $order_products
        ...
    );
  1. и в файле ветки измените цикл for
    {% for order_product in order.order_products %}
    <li>{{ order_product.name }}</li>
    {% endfor %}

По сути, мы расширяем объект заказов, чтобы включить информацию о продуктах, а затем отображаем ее в представлении.

person Dmitriy Zhuk    schedule 19.02.2019
comment
@ Привет, Дмитрий, спасибо за быстрый ответ, я следовал вашим инструкциям, но я получаю пустой результат! У меня есть одно сомнение, вы хотите, чтобы я заменил массив $data['products'] переменной $order_products? - person Prosenjeet Paul; 19.02.2019
comment
Посмотрев глубже, я увидел одну крошечную ошибку в вашем цикле и исправил ее, она работает абсолютно нормально. Вы классные спасибо большое. Вот рабочая петля для веточки. '{% for order_product в order.order_products %} {{order_product.name}} {{order_product.quantity}} {% endfor %}' - person Prosenjeet Paul; 19.02.2019
comment
Да, вы правы, сначала был этот ключ products_info, потом решил переименовать его во что-нибудь получше. исправит ответ. Наслаждайтесь! загляните на мой канал YouTube, чтобы получить дополнительные советы по адресу youtube.com/dreamvention. - person Dmitriy Zhuk; 21.02.2019
comment
Я большой поклонник Dreamvention, мне так повезло, что я получил ответ от участника dreamvention. И я подписался на твой канал. - person Prosenjeet Paul; 22.02.2019
comment
Рад слышать. Спасибо! Мы, наконец, выходим на открытое пространство и больше делимся информацией в социальных сетях, но это действительно сложно, потому что мы в большей степени являемся кодовыми крысами. Рад, что смог помочь - person Dmitriy Zhuk; 03.03.2019