Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] двойная сортировка в заказах админ


Recommended Posts

Не могу въехать, почему не работает двойная сортировка в админ панели, в каталоге, в товарах такой принцип работает, а тут нет, пожалуйста подскажите, что не так делаю.

 

Мне надо, чтобы в заказах была двойная сортировка - сначала по статусу, потом по дате изменения. Статус у меня уже стоит по умолчанию, потому нужно добавить только по дате изменения, потому делаю следующее:

 

в

\admin\model\sale\order.php 
 
		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['sort']) && in_array($data['sort'], $sort_data)) {
			$sql .= " ORDER BY " . $data['sort'] . ", o.date_modified";
		} else {
			$sql .= " ORDER BY o.order_id";
		}

после этого сортируется только по дате.. Почему так, что делаю не так??

 

Спасибо за помощь!!!

 

 

Надіслати
Поділитися на інших сайтах


То есть после Ваших изменений, Вы выбираете например Статус: Ожидание и Дату, а у Вас выводятся все заказы(не взирая на выбранный статус) за указанную дату? Я правильно понял?

Надіслати
Поділитися на інших сайтах

нет. речь не про фильтр, а про сортировку (по умолчанию и двойную).

 

заказы сортируются по статусу у меня только, а надо, чтобы было сначала по статусу, а потом по дате.

По какому принципу они выводятся вообще понять не могу - ни по дате ни по номеру заказа... хрен поймешь.  

 

Т.е. у меня большой список завершенных заказов, но они все перемешаны непонятным образом, хотелось таким образом их упорядочить сортировкой по дате.

Надіслати
Поділитися на інших сайтах



if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {

            $sql .= " ORDER BY o.date_modified, " . $data['sort'];

        } else {

            $sql .= " ORDER BY o.order_id";

}

Надіслати
Поділитися на інших сайтах

спасибо, но так тоже пробовал - результат тот же - сортируется только по дате, какую сортировку не выбираю - в результате только по дате :(

 

а у вас сортируется?? (может тогда это в моей версии косяк)

Змінено користувачем dm82
Надіслати
Поділитися на інших сайтах


По статусу так сортировать не будет, Вы бы var_dump запроса сделали который идет к БД, как сейчас написано сортирует по order_id и по date_modified, надо дописать...

Надіслати
Поділитися на інших сайтах

В модели перед return сделайте var_dump($sql), затем обновите страницу с заказами и Вы на экране увидите запрос, который идет к БД при открытии страницы заказов...

Надіслати
Поділитися на інших сайтах

Я Вам это сказал, чтобы Вы увидели, что по умолчанию по статусу вообще сортировка не происходит, только по id заказа и в нашем случае теперь еще и по дате изменения, чтобы сортировалось еще и по статусу необходимо поправить сам запрос

Надіслати
Поділитися на інших сайтах

у меня по умолчанию как раз только по статусу и происходит..

сам 

$data['sort']

выставлен по статусу в контроллере

 

\admin\controller\sale\order.php

if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		} else {
			$sort = 'status';
		}

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

Надіслати
Поділитися на інших сайтах


в верху страницы заказов, над шапкой вылезло такое:

 

string(350) "SELECT o.order_id, CONCAT(o.firstname, ' ', o.lastname) AS customer, o.telephone, (SELECT os.name FROM order_status os WHERE os.order_status_id = o.order_status_id AND os.language_id = '1') AS status, o.total, o.currency_code, o.currency_value, o.date_added, o.date_modified FROM `order` o WHERE o.order_status_id > '0' ORDER BY status ASC LIMIT 0,20"
Надіслати
Поділитися на інших сайтах


РЕШЕНО!!!

 

спасибо за решение, devrvk

 

простое и красивое обуздание sql с ее бардаком вывода данных в заказах:

 
\admin\model\sale\order.php 
 

после

		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";
		}

добавить

		$sql .= ", date_format(o.date_modified, '%Y-%m-%d') DESC";

Надіслати
Поділитися на інших сайтах


v.2

 

еще лучше просто добавить

		$sql .= ", o.date_modified DESC";

тогда будет сортировать не только по дням, но и по времени (в секундах)

(спасибо devrvk)

 

А вообще, думаю, как минимум это:

		$sql .= ", o.order_id DESC";

т.е. сортировка по номеру заказа, в случае одинаковых имен, статусов и т.п.

должно быть в стандартной сборке.

Криейторам на заметку)

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.