Функция поиска и экспорта

Добрый день! На админке сделал возможность как и товары делать экспорт найденных товаров. Помоги пожалуйста разобраться почему при нажатии на экспорт она не экспортирует. Какая функция или свойство нужно для этого?

Экспорт всех найденных?

На схеме exim в файле orders.functions.php написал как и на products 2 функции:

// MODIFIER

/**
 * Gets found orders count for export.
 *
 * @return int
 */
function fn_exim_get_last_view_orders_count()
{
    $last_view = new Backend(AREA, 'orders', 'index');
    $view_id = $last_view->getCurrentViewId();
    $last_view_results = $last_view->getViewParams($view_id);

    if (!$last_view_results) {
        return 0;
    }

    return $last_view_results['total_items'];
}

/**
 * Gets found orders to export.
 *
 * @return int[]
 */
function fn_exim_get_last_view_order_ids_condition()
{
    $last_view = new Backend(AREA, 'order', 'index');
    $view_id = $last_view->getCurrentViewId();
    $last_view_results = $last_view->getViewParams($view_id);

    $data_function_params = [];
    if ($last_view_results) {
        unset(
            $last_view_results['total_items'],
            $last_view_results['sort_by'],
            $last_view_results['sort_order'],
            $last_view_results['sort_order_rev'],
            $last_view_results['page'],
            $last_view_results['items_per_page']
        );
        $data_function_params = $last_view_results;
    }

    $data_function_params['get_conditions'] = true;
    $data_function_params['load_order_extra_data'] = false;

    list($fields, $join, $condition) = fn_get_orders($data_function_params, 0, CART_LANGUAGE);
    $order_ids = db_get_fields(
        'SELECT DISTINCT ?p' .
        ' FROM ?:orders AS orders' .
        ' ?p' .
        ' WHERE 1 = 1' .
        ' ?p',
        $fields['order_id'],
        $join,
        $condition
    );

    return [
        'order_id' => $order_ids
    ];
}

Потом сделал кнопку на order.manage

{if $orders}
    <li>{btn type="list" text="Экспорт найденных заказов" href="orders.export_found"}</li>
{/if}

И сделал mode для контроллера orders.php:

elseif ($mode == 'export_found') {
    if (empty(Tygh::$app['session']['export_ranges'])) {
        Tygh::$app['session']['export_ranges'] = [];
    }

    if (empty(Tygh::$app['session']['export_ranges']['orders']['pattern_id'])) {
        Tygh::$app['session']['export_ranges']['orders'] = ['pattern_id' => 'orders'];
    }

    Tygh::$app['session']['export_ranges']['orders']['data_provider'] = [
        'count_function' => 'fn_exim_get_last_view_orders_count',
        'function'       => 'fn_exim_get_last_view_order_ids_condition',
    ];

    unset($_REQUEST['redirect_url'], Tygh::$app['session']['export_ranges']['orders']['data']);

    return [
        CONTROLLER_STATUS_OK,
        'exim.export?section=orders&pattern_id=' . Tygh::$app['session']['export_ranges']['orders']['pattern_id'],
    ];
}

Да всех найденных внизу расписал как я делал

Все новое - хорошо забытое старое )))

Сработает ли такой метод для orders

Сработает, я переделал под заказы, полет нормальный

1 лайк

Круто работает!)

Добрый день!
Сделал такие поля в которых нужно добавить функцию поиска как у менеджера
image
Все сделал как и у менеджера issuers
Получаю ошибку:
Unknown column ‘issuers.firstname’ in ‘field list’ (1054)

SELECT cscart_orders.order_id, cscart_orders.issuer_id, cscart_orders.courier_id, cscart_orders.warehouseman_id, cscart_orders.user_id, cscart_orders.is_parent_order, cscart_orders.parent_order_id, cscart_orders.company_id, cscart_orders.company, cscart_orders.timestamp, cscart_orders.updated_at, cscart_orders.firstname, cscart_orders.lastname, cscart_orders.email, cscart_orders.company, cscart_orders.phone, cscart_orders.status, cscart_orders.total, CONCAT(issuers.firstname, ’ ', issuers.lastname) as issuer_name, issuers.email as issuer_email, CONCAT(couriers.firstname, ’ ', couriers.lastname) as courier_name, couriers.email as courier_email, CONCAT(couriers.firstname, ’ ', couriers.lastname) as courier_name, couriers.email as courier_email, invoice_docs.doc_id as invoice_id, memo_docs.doc_id as credit_memo_id, cscart_users.user_type, cscart_companies.company as company_name, cscart_order_data.data as points FROM cscart_orders LEFT JOIN cscart_users as warehousemans ON warehousemans.user_id = cscart_orders.warehouseman_id LEFT JOIN cscart_order_docs as invoice_docs ON invoice_docs.order_id = cscart_orders.order_id AND invoice_docs.type = ‘I’ LEFT JOIN cscart_order_docs as memo_docs ON memo_docs.order_id = cscart_orders.order_id AND memo_docs.type = ‘C’ LEFT JOIN cscart_users ON cscart_users.user_id = cscart_orders.user_id LEFT JOIN cscart_companies ON cscart_companies.company_id = cscart_orders.company_id LEFT JOIN cscart_order_data ON cscart_order_data.order_id = cscart_orders.order_id AND cscart_order_data.type = ‘W’ WHERE 1 AND cscart_orders.is_parent_order != ‘Y’ ORDER BY cscart_orders.timestamp desc, cscart_orders.order_id desc LIMIT 0, 10

Как доделать без ошибок? Подскажите пожалуйста

По моему понятию ошибка наверно в этом участке кода:

if (in_array('issuers', $params['extra'], true)) {
        $fields[] = "CONCAT(issuers.firstname, ' ', issuers.lastname) as issuer_name";
        $fields[] = 'issuers.email as issuer_email';
    }
// MODIFIER
    if (in_array('couriers', $params['extra'], true)) {
        $fields[] = "CONCAT(couriers.firstname, ' ', couriers.lastname) as courier_name";
        $fields[] = 'couriers.email as courier_email';
    }

    if (in_array('couriers', $params['extra'], true)) {
        $fields[] = "CONCAT(couriers.firstname, ' ', couriers.lastname) as courier_name";
        $fields[] = 'couriers.email as courier_email';
    }

Да все правильно подумал! Там нужно было их обозначить для того чтобы система понимала что не таблица.