Перенос данных из order_info.tpl в order_list.tpl

Тема в разделе "Общие вопросы", создана пользователем mrnew, 14 окт 2015.

  1. mrnew

    mrnew Новичок

    Сообщения:
    12
    Симпатии:
    1
    Пожалуйста, помогите вывести информацию из истории конкретного заказа на общую страницу с заказами.
    Я хотел бы из файла order_info.tpl взять название товара
    <?php echo $product['name']; ?>
    и опции
    <?php foreach ($product['option'] as $option) { ?>
    <br />
    &nbsp;<small> - <?php echo $option['name']; ?>: <?php echo $option['value']; ?></small>
    <?php } ?>

    и отобразить их в таблице на странице order_list.tpl
    Что нужно подправить в order.php , чтобы все корректно отображалось? Большое спасибо!
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Это надо из функции getForm перетаскивать в getList
    Вечерком попробую сделать..
     
  3. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    в файле admin\controller\sale\order.php

    находим
    PHP:
            $results $this->model_sale_order->getOrders($filter_data);

            foreach (
    $results as $result) {
    перед ним вставим
    PHP:
    $order_products = array();
    а после вставляем
    PHP:
          $products $this->model_sale_order->getOrderProducts($result['order_id']);

           foreach (
    $products as $product) {
             
    $order_products[] = array(
               
    'product_id' => $product['product_id'],
               
    'name'  => $product['name'],
               
    'option'  => $this->model_sale_order->getOrderOptions($result['order_id'], $product['order_product_id']),
             );
           }

    ниже находим
    Код:
    'order_id'  => $result['order_id'],
    и после вставим
    PHP:
     'order_products'  => $order_products,

    В шаблоне admin\view\template\sale\order_list.tpl

    находим цикл <?php foreach ($orders as $order) { ?>

    и где нибудь в нужную колонку вставим
    PHP:
                <div class="table-responsive">
                    <table class="table table-bordered">
                      <tbody id="cart">
                        <?php if ($order['order_products']) { ?>
                        <?php $product_row 0?>
                        <?php foreach ($order['order_products'] as $order_product) { ?>
                        <tr>
                          <td class="text-left"><?php echo $order_product['name']; ?><br />
                            <input type="hidden" name="product[<?php echo $product_row?>][product_id]" value="<?php echo $order_product['product_id']; ?>" />
                            <?php foreach ($order_product['option'] as $option) { ?>
                            - <small><?php echo $option['name']; ?><?php echo $option['value']; ?></small><br />
                            <?php if ($option['type'] == 'select' || $option['type'] == 'radio' || $option['type'] == 'image') { ?>
                            <input type="hidden" name="product[<?php echo $product_row?>][option][<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['product_option_value_id']; ?>" />
                            <?php ?>
                            <?php if ($option['type'] == 'checkbox') { ?>
                            <input type="hidden" name="product[<?php echo $product_row?>][option][<?php echo $option['product_option_id']; ?>][]" value="<?php echo $option['product_option_value_id']; ?>" />
                            <?php ?>
                            <?php if ($option['type'] == 'text' || $option['type'] == 'textarea' || $option['type'] == 'file' || $option['type'] == 'date' || $option['type'] == 'datetime' || $option['type'] == 'time') { ?>
                            <input type="hidden" name="product[<?php echo $product_row?>][option][<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['value']; ?>" />
                            <?php ?>
                            <?php ?></td>
                        </tr>
                        <?php $product_row++; ?>
                        <?php ?>

                        <?php } else { ?>
                        <tr>
                          <td class="text-center" colspan="6"><?php echo $text_no_results?></td>
                        </tr>
                      </tbody>
                      <?php ?>
                    </table>
                  </div>
     
    soundslider, solunski.d и mrnew нравится это.
  4. mrnew

    mrnew Новичок

    Сообщения:
    12
    Симпатии:
    1
    Но что-то не получилось у меня, хотя все делал точно, как у вас описано.
    Видимо придется мне обращаться за помощью к специалисту по opencart.
    В любом случае, спасибо вам большое!
     
  5. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Если есть модификаторы окмод, то надо и кеш обновить, вдруг закешировалось.
     
  6. mrnew

    mrnew Новичок

    Сообщения:
    12
    Симпатии:
    1
    Видимо произошла путаница. Я имел ввиду страницу с заказами, которую видит обычный пользователь)
     
  7. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    Для личного кабинета!!

    В файле catalog\controller\account\order.php

    перед
    Код:
    $data['orders'][] = array(
    добавим
    PHP:
                $products_data = 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']);
                        }

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

                    
    $products_data[] = array(
                        
    'name'     => $product['name'],
                        
    'option'   => $option_data,
                    );
                }
    затем ниже после
    Код:
                $data['orders'][] = array(
                    'order_id'   => $result['order_id'],
    добавим
    PHP:
                    'products_data'   => $products_data

    в файле catalog\view\theme\default\template\account\order_list.tpl

    в одну из колонок добавим
    Код:
            <table class="table table-bordered table-hover">
              <tbody>
                <?php foreach ($order['products_data'] as $product) { ?>
                <tr>
                  <td class="text-left"><?php echo $product['name']; ?>
                    <?php foreach ($product['option'] as $option) { ?>
                    <br />
                    &nbsp;<small> - <?php echo $option['name']; ?>: <?php echo $option['value']; ?></small>
                    <?php } ?></td>
                </tr>
                <?php } ?>
              </tbody>
            </table>
     
    Последнее редактирование: 18 окт 2015
    soundslider, solunski.d и mrnew нравится это.
  8. mrnew

    mrnew Новичок

    Сообщения:
    12
    Симпатии:
    1
    Большое спасибо за помощь!
    Все отобразилось, но есть небольшой глюк - когда совершаешь второй заказ, то товары из него попадают в первый заказ, который был совершен ранее.
    Получается такая картина - товары из нового заказа, добавляются во все старые. Но в то же время самый последний новый заказ содержит только нужные товары.
     
  9. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    Надо массив $products_data очищать. Буду у компа напишу.
     
  10. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    изменил $data['products'] = array(); на другое
     
    mrnew нравится это.
  11. den3

    den3 Новичок

    Сообщения:
    9
    Симпатии:
    3
    Как изображения товара вывести в /admin/view/template/sale/order_list.tpl ?

    после
    Код:
    <td style="width: 1px;" class="text-center"><input type="checkbox" onclick="$('input[name*=\'selected\']').prop('checked', this.checked);" /></td>
    вставил
    Код:
    <td class="text-center">Изображение</td>
    после
    Код:
    <input type="hidden" name="shipping_code[]" value="<?php echo $order['shipping_code']; ?>" /></td>
    вставил
    Код:
    <td class="text-right"><?php echo $product['thumb']; ?></td>
    получил результат вместо картинки ошибку

    Помогите, пожалуйста, не нашел решения в поиске для картинки товара в списке заказов.
     

    Вложения:

  12. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Это как в списке заказов изображение товара? Товаров ведь несколько может быть.
     
  13. den3

    den3 Новичок

    Сообщения:
    9
    Симпатии:
    3
    для OC 1.5 ставил модуль "подробный список заказов", но этого модуля версия для OC 2.3 нет. там выводился все фото товаров данного заказа. Менеджеры привыкли не открывая подробности заказа обрабатывать заказ. После обновления движка на 2.3 сказали неудобно, попросили сделать как раньше. Результат который от меня хотят примерно как на фото. Помогите, пожалуйста, реализовать.
    по этой статье вывел в историю заказа фото товара, но а в список не получается.
     

    Вложения:

    • 1234.png
      1234.png
      Размер файла:
      37,7 КБ
      Просмотров:
      12
    Последнее редактирование: 30 дек 2019
  14. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    100%
    а еще интересно, с какого перепугу в product_list.tpl окажется $product['thimb'] ?
     
  15. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    Так же как описано выше в третьем сообщении. Только вместо перебора такого
    PHP:
           foreach ($products as $product) {
             
    $order_products[] = array(
               
    'product_id' => $product['product_id'],
               
    'name'  => $product['name'],
               
    'option'  => $this->model_sale_order->getOrderOptions($result['order_id'], $product['order_product_id']),
             );
           }
    Делаем немного усовершенсвованное.

    А именно вставим получение данных о товаре.
    PHP:
    $product_info $this->model_catalog_product->getProduct($product['product_id']);
    т.е должно получится на подобии этого
    PHP:
    foreach ($products as $product) {
       
    $product_info $this->model_catalog_product->getProduct($product['product_id']);
      
       
    $order_products[] = array(
           
    'product_id' => $product['product_id'],
           
    'name'  => $product_info['name'],
           
    'image'  => $product_info['image'],
       );
    }
    далее в шаблоне в цикле формируем в нужном формате то что нужно.
     
    Последнее редактирование: 30 дек 2019
    fanatic нравится это.
  16. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    модель - создаем метод
    PHP:
        public function getOrderProductsAndImages($order_id) {
            
    $query $this->db->query("SELECT op.*, p.image FROM " DB_PREFIX "order_product op
                LEFT JOIN " 
    DB_PREFIX "product p ON(op.product_id = p.product_id)
                WHERE order_id = '" 
    . (int) $order_id "'");

            return 
    $query->rows;
        }
    контроллер делаем так
    PHP:
            foreach ($results as $result) {
                
    $this->load->model('tool/image');
                
    $order_products = array();

                
    $products $this->model_sale_order->getOrderProductsAndImages($result['order_id']);

                foreach (
    $products as $product) {
                    if (
    is_file(DIR_IMAGE $product['image'])) {
                        
    $image $this->model_tool_image->resize($product['image'], 4040);
                    } else {
                        
    $image $this->model_tool_image->resize('no_image.png'4040);
                    }

                    
    $order_products[] = array(
                        
    'product_id' => $product['product_id'],
                        
    'name' => $product['name'],
                        
    'model' => $product['model'],
                        
    'option' => $this->model_sale_order->getOrderOptions($result['order_id'], $product['order_product_id']),
                        
    'quantity' => $product['quantity'],
                        
    'price' => $product['price'],
                        
    'total' => $product['total'],
                        
    'reward' => $product['reward'],
                        
    'image' => $image
                    
    );
                }
                
    $data['orders'][] = array(
                    
    'order_id' => $result['order_id'],
                    
    'customer' => $result['customer'],
                    
    'order_status' => $result['order_status'] ? $result['order_status'] : $this->language->get('text_missing'),
                    
    'total' => $this->currency->format($result['total'], $result['currency_code'], $result['currency_value']),
                    
    'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added'])),
                    
    'date_modified' => date($this->language->get('date_format_short'), strtotime($result['date_modified'])),
                    
    'shipping_code' => $result['shipping_code'],
                    
    'view' => $this->url->link('sale/order/info''token=' $this->session->data['token'] . '&order_id=' $result['order_id'] . $urltrue),
                    
    'edit' => $this->url->link('sale/order/edit''token=' $this->session->data['token'] . '&order_id=' $result['order_id'] . $urltrue),
                    
    'order_products' => $order_products
                
    );
            }
    шаблон
    HTML:
    <td class="text-left">Товары</td>
    
    ............................................
    
    
    <td class="text-left">
        <?php if ($order['order_products']) { ?>
            <?php foreach ($order['order_products'] as $order_product) { ?>
                <img src="<?php echo $order_product['image']; ?>"><?php echo $order_product['name']; ?><br />
                <?php foreach ($order_product['option'] as $option) { ?>
                    - <small><?php echo $option['name']; ?>: <?php echo $option['value']; ?></small><br />
                <?php } ?>
            <?php } ?>
        <?php } ?></td>
    
     
    Последнее редактирование: 30 дек 2019
    Vlad нравится это.
  17. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    p.s сюда
    HTML:
    <td class="text-left">Товары</td>
    переменную локализации
    это уже сами
     
  18. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    а еще
    очепятка:(
     
  19. den3

    den3 Новичок

    Сообщения:
    9
    Симпатии:
    3
    Честно говоря я запутался в теме и сбился ... что? куда? когда? .... :eek:
    Может если есть у Вас время (извините за наглость и возможно тупость) может переделаете старый вкмод под осмод?
    Будет полезно и лучше если ещё туда запихаете фото: в счете, в письме покупателю, в история заказов аккаунта покупателя
    Извините, только не ругайте меня
     

    Вложения:

  20. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    а за пивом, сбегать не нужно?
    хотя, если есть бюджет, можно подумать