[Помогите] Добавить настраиваемые поля в конечный счет заказа

Тема в разделе "OpenCart", создана пользователем Jess23, 22 дек 2016.

  1. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Доброго времени, помоги разобраться с такой проблемой, хочу вывести поля shipping_custom_field (это кастомные настраиваемые поля доставки) в файле order_invoice.tpl (это файл который для печати внутри заказа)...

    В общем все просто, у нас есть контроллер который отвечает за весь ордер, он же - order.php, внутри есть функция invoice() которая отвечает за обработку всего что происходит в файле order_invoice.tpl, добавил нужные поля в order.php в нужную функцию invoice() таким образом:

    PHP:
    'payment_custom_field' => $order_info['payment_custom_field'],
    'shipping_custom_field' => $order_info['shipping_custom_field'],
    Вывод делаю внутри файла order_invoice.tpl таким образом:
    PHP:
    <?php foreach ($order['shipping_custom_field'] as $custom_field) { ?>
    <?php 
    echo $custom_field['value']; ?>
    <?php 
    ?>
    Таким образом все работает, но постоянно получаю ошибку в логах: Illegal string offset 'value', а если кастомное поле не заполнено, то есть не имеет значения, то при запросе в логах пишет Uninitialized string offset: 0.

    Все ругаются на строчку: <?php echo $custom_field['value']; ?>

    Делал проверку с помощь isset никакого корректного результату нету, ничего не генерируется и не отображаеться. Нашел в на стековерфлоу похожий вариант решения данной задачи, все сделал как там описано но ничего так и не завелось....
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Ну, судя по ошибке у вас в $custom_field строка.
    Проверьте, что у вас в массиве $order['shipping_custom_field'] (и массив ли это вообще).
     
  3. Jess23

    Jess23

    Регистрация:
    21 авг 2015
    Сообщения:
    118
    Симпатии:
    135
    Все отлично работает в файле order_info.tpl таким же образом...
    PHP:
    <?php foreach ($shipping_custom_fields as $custom_field) { ?>
    <tr data-sort="<?php echo $custom_field['sort_order'] + 1?>">
    <td><?php echo $custom_field['name']; ?>:</td>
    <td><?php echo $custom_field['value']; ?></td>
     </tr>
     
  4. chukcha

    chukcha

    Регистрация:
    9 окт 2014
    Сообщения:
    448
    Симпатии:
    119
    вы как-то не внимательно смотрите
    info()
    Код:
    $data['shipping_custom_fields'] = array();
    
                foreach ($custom_fields as $custom_field) {
                    if ($custom_field['location'] == 'address' && isset($order_info['shipping_custom_field'][$custom_field['custom_field_id']])) {
                        if ($custom_field['type'] == 'select' || $custom_field['type'] == 'radio') {
                            $custom_field_value_info = $this->model_customer_custom_field->getCustomFieldValue($order_info['shipping_custom_field'][$custom_field['custom_field_id']]);
    
                            if ($custom_field_value_info) {
                                $data['shipping_custom_fields'][] = array(
                                    'name'  => $custom_field['name'],
                                    'value' => $custom_field_value_info['name'],
                                    'sort_order' => $custom_field['sort_order']
                                );
                            }
                        }
    
                        if ($custom_field['type'] == 'checkbox' && is_array($order_info['shipping_custom_field'][$custom_field['custom_field_id']])) {
                            foreach ($order_info['shipping_custom_field'][$custom_field['custom_field_id']] as $custom_field_value_id) {
                                $custom_field_value_info = $this->model_customer_custom_field->getCustomFieldValue($custom_field_value_id);
    
                                if ($custom_field_value_info) {
                                    $data['shipping_custom_fields'][] = array(
                                        'name'  => $custom_field['name'],
                                        'value' => $custom_field_value_info['name'],
                                        'sort_order' => $custom_field['sort_order']
                                    );
                                }
                            }
                        }
    
                        if ($custom_field['type'] == 'text' || $custom_field['type'] == 'textarea' || $custom_field['type'] == 'file' || $custom_field['type'] == 'date' || $custom_field['type'] == 'datetime' || $custom_field['type'] == 'time') {
                            $data['shipping_custom_fields'][] = array(
                                'name'  => $custom_field['name'],
                                'value' => $order_info['shipping_custom_field'][$custom_field['custom_field_id']],
                                'sort_order' => $custom_field['sort_order']
                            );
                        }
    
                        if ($custom_field['type'] == 'file') {
                            $upload_info = $this->model_tool_upload->getUploadByCode($order_info['shipping_custom_field'][$custom_field['custom_field_id']]);
    
                            if ($upload_info) {
                                $data['shipping_custom_fields'][] = array(
                                    'name'  => $custom_field['name'],
                                    'value' => $upload_info['name'],
                                    'sort_order' => $custom_field['sort_order']
                                );
                            }
                        }
                    }
                }
    Видите какой код?

    а что в инвойсе

    там не только нужно получить но и подготовить в нужном формате