Как вывести данные

Добрый день! Столкнулся проблемой. Как получить данные $order_info на странице order.manage?

Там этот массив просто называется $o

Речь идет о странице админки ?dispatch=orders.manage ?

Да. Мне нужно оттуда взять значение payment_id и поставить условие. Хочу вывести суммы по методам оплаты. Как внизу страницы

На странице ?dispatch=orders.manage нет такой переменной. И внутри него не видно массивов

Хотелось бы получить данные отсюда:

Есть, только что проверил. В файле
/design/backend/templates/views/orders/manage.tpl

Но вот только информации payment_id в этом массиве нет

1 лайк

Извиняюсь, оказывается есть.

1 лайк

Надо в своём модуле пост контроллер к контроллеру order, мод manage, и для каждого заказа в массиве orders получить нужную информацию и прицепить к массиву
Ровно также делал, когда понадобилось больше инфы выводить на списке

2 лайка

Вас понял. Попробую найти информацию и прицепить его к $order

Если что, через час буду за компом, смогу скинуть

1 лайк

Спасибо)

Как вариант - использовать хук pre_get_orders (app/functions/fn.cart.php) и расширить массив $fields, добавив туда payment_id

2 лайка

Мне тогда долго думать некогда было, поэтому сделал по-быстрому
/app/addons/имя_модуля/controllers/backend/orders.post.php

<php
if ($mode == 'manage') {
    $orders = Tygh::$app['view']->getTemplateVars('orders');
    
    foreach ($orders as &$order) {
        $order['order_info'] = fn_get_order_info($order['order_id']);
        $order['order_info']['amount'] = 0;
        foreach ($order['order_info']['products'] as &$p) {
            $order['order_info']['amount'] += $p['amount'];
            $p['image'] = fn_get_image_pairs($p['product_id'], 'product', 'M');
        }
        
    }
    Tygh::$app['view']->assign('orders', $orders);
}

мне нужны были способ оплаты и доставки, количество товаров в заказе, изображения товаров и еще кое-какая мелочь

2 лайка

Всем спасибо! Попробую достать сначало order_info потом данные с sales_reports

Если будете выводить по 250 заказов на страницу, может подтормаживать. Лучше использовать hook, если речь только про поле payment_id

  1. Включите модуль my_changes (Мои изменения) - если модуль не включен

  2. Создайте файл init.php в директории /app/addons/my_changes/init.php

<?php

if (!defined('BOOTSTRAP')) { die('Access denied'); }

fn_register_hooks(
    'pre_get_orders'
);

!Не тестировано

  1. Создайте файл func.php в директории /app/addons/my_changes/func.php
<?php

if (!defined('BOOTSTRAP')) { die('Access denied'); }

function fn_my_changes_pre_get_orders($params, &$fields, $sortings, $get_totals, $lang_code)
{
	$fields[] = '?:orders.payment_id';
}
2 лайка

Спасибо за ответ! Попробую.

Решение превосходное. Получил все данные с order_info. Спасибо большое!

На самом деле всё зависит от данных, которые нужны. если пару полей из уже включенных в запрос таблиц - правильней через хук. Если подключать другие таблицы - вот тут как раз может наступить попа именно если через хук делать. В пост контроллере мы работаем уже только с отобранными для страницы заказами, и проверено, разницы в скорости почти нет. Конечно, пробовал сначала через хук, но так как нужны были главные изображения товаров из заказа - вот тут тормоза и наступали.

2 лайка

А что делать если у них будут одинаковые массивы. Например и в order_info есть image и на order. Можно ли их как то сортировать и удалить не нужные массивы?

Можно попробовать вместо

$order['order_info'] = fn_get_order_info($order['order_id']);

поставить

$order = fn_get_order_info($order['order_id']);

но не проверял что будет, хотя должно работать, и по идее, это правильнее

1 лайк