на странице выводится по 250 записей
controller
$results = $this->model_sale_refund_received->getOrders($data);
foreach ($results as $result) {
$action = array();
$user = $this->model_sale_refund_received->getCustomerUserId($result['customer_id']);
$products = $this->model_sale_refund_received->getProduct($result['order_id']);
$action[] = array(
'text' => $this->language->get('text_view'),
'href' => $this->url->link('sale/order/info', 'token=' . $this->session->data['token'] . '&order_id=' . $result['order_id'] . $url, 'SSL')
);
if (strtotime($result['date_added']) > strtotime('-' . (int)$this->config->get('config_order_edit') . ' day')) {
$action[] = array(
'text' => $this->language->get('text_edit'),
'href' => $this->url->link('sale/order/update', 'token=' . $this->session->data['token'] . '&order_id=' . $result['order_id'] . $url, 'SSL')
);
}
$this->data['orders'][] = array(
'order_id' => $result['order_id'],
'customer' => $result['customer'],
'comment' => preg_replace("/(http:\/\/([a-zA-Z_0-9\.\?\&\#\;\:\+\-\=\%\/]*))/i", " <a href=\"http://\\2\">\\2</a>",$result['comment']),
'shipping_lastname' => $result['shipping_firstname'] . " " . $result['shipping_lastname'],
'status' => $result['status'],
'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'])),
'stock_y' => $result['stock_y'],
'stock_n' => $result['stock_n'],
'post_date' => ($result['post_date'] != "0000-00-00") ? date($this->language->get('date_format_short'), strtotime($result['post_date'])) : "",
'sum_' => ($result['sum_'] > 0) ? (float)$result['sum_'] : "",
'ttn' => $result['ttn'],
'order_status_id' => $result['order_status_id'],
'novaposhta_ei_number' => $result['novaposhta_ei_number'],
'ttn_status' => $result['ttn_status'],
'selected' => isset($this->request->post['selected']) && in_array($result['order_id'], $this->request->post['selected']),
'file' => $result['file'],
'action' => $action,
'user' => $user['user_id'],
'product' => $products,
);
}
model
public function getOrders($data = array()) {
$sql = "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT os.name FROM " . DB_PREFIX . "order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '" . (int)$this->config->get('config_language_id') . "') AS status, o.comment, o.shipping_lastname, o.shipping_firstname, o.total, o.currency_code, o.novaposhta_ei_number, o.currency_value, o.date_added, o.date_modified, o.date_delivery, o.post_date, o.sum_, o.file, o.sum_delivery, o.ttn, o.ttn_status, o.manager_customer, o.payment_code, o.stock_y, o.stock_n, o.order_status_id, o.customer_id FROM `" . DB_PREFIX . "order` o";
if (isset($data['filter_order_status_id']) && !is_null($data['filter_order_status_id'])) {
$sql .= " WHERE o.order_status_id = '" . (int)$data['filter_order_status_id'] . "'";
} else {
$sql .= " WHERE o.order_status_id > '0'";
}
if (!empty($data['filter_order_id'])) {
$sql .= " AND o.order_id = '" . (int)$data['filter_order_id'] . "'";
}
if (!empty($data['filter_ttn'])) {
$sql .= " AND o.ttn = '" . trim($data['filter_ttn']) . "'";
}
if (!empty($data['filter_comment'])) {
$sql .= " AND comment = '" . (int)$data['filter_comment'] . "'";
}
if (!empty($data['filter_shipping_firstname'])) {
$sql .= " AND o.shipping_firstname = '" . trim($data['filter_shipping_firstname']) . "'";
}
if (!empty($data['filter_ttn_status'])) {
$sql .= " AND o.ttn_status = '" . $data['filter_ttn_status'] . "'";
}
if (!empty($data['filter_post_date'])) {
$sql .= " AND DATE(o.post_date) = DATE('" . $this->db->escape($data['filter_post_date']) . "')";
}
if (!empty($data['filter_customer'])) {
$sql .= " AND LCASE(CONCAT(o.firstname, ' ', o.lastname)) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_customer'])) . "%'";
}
if (!empty($data['filter_date_added'])) {
$sql .= " AND DATE(o.date_added) = DATE('" . $this->db->escape($data['filter_date_added']) . "')";
}
if (!empty($data['filter_total'])) {
$sql .= " AND o.total = '" . (float)$data['filter_total'] . "'";
}
$sort_data = array(
'o.order_id',
'customer',
'comment',
'shipping_lastname',
'status',
'o.date_added',
'o.date_modified',
'o.total',
'ttn',
'post_date',
'shipping_firstname',
'ttn_status'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY o.order_id";
}
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
} else {
$sql .= " ASC";
}
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
$query = $this->db->query($sql);
return $query->rows;
}
Нужно на этой странице вывести еще и названия товара.
foreach ($results as $result) {
..............
$products = $this->model_sale_refund_received->getProduct($result['order_id']);
..............................
'file' => $result['file'],
'action' => $action,
'user' => $user['user_id'],
'product' => $products,
model
public function getProduct($order_id)
{
$products = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . $order_id . "'");
return $products->rows;
}
Все выводится как надо, но время загрузки увеличилось до 1 мин, как можно уменьшить время загрузки
проиндексировать таблицы в базе данных.
поискать расширение для opencart 1.5 кеширующее выборки данных (хз есть ли такие)
использовать инструменты серверного кеширования, например Memcached
перейти на opencart 3 и php7.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости