По-умолчанию сортировка записей в рубриках выполняется исходя из даты публикации:
$par = array( 'order' => 'page_date_publish', 'order_asc' => 'desc' );
Можно ли сделать комбинированный тип сортировки: сначала сортируются записи, у которых задан параметр page_menu_order (порядок). Далее сортируются записи без него, они сортируются по page_date_publish.
Если задать:
$par['order'] = 'page_menu_order'; $par['order_asc'] = 'desc';
То сортировка будет производится с учетом page_menu_order. Но в этом случае не будет учитываться page_date_publish.
Как сделать, чтобы если page_menu_order = 0, то сортировка производилась с учетом page_date_publish?
UPD. Благодаря нашим специалистам было найдено решение:
$par['order'] = 'page_menu_order desc, page_date_publish desc'; $par['order_asc'] = '';
Работает замечательно. Так, как и должно быть. Возник вопрос. Если мы изменим способ сортировки по page_menu_order на asc:
$par['order'] = 'page_menu_order asc, page_date_publish desc'; $par['order_asc'] = '';
То получим, что все записи с page_menu_order = 0 становятся выше всех. Можно ли сделать так, как показано на картинке (вариант с page_menu_order asc)?
- Как выводить короткое описание записей на главной в шаблоне Max-Zmey?
- Database not connected
- Где взять пример кода для type_foreach файла?
- Изменить ссылки на метки
- Как сделать вывод логотипа поверх слайдера в шапке сайта?
- Как использовать captcha в плагине forms?
- Как на MaxSite CMS сделать урлы вида сайт/id?
Катя, если я правильно понимаю, то можно попытаться получить желаемое при задании двойной сортировки таким образом (это возможно судя по описанию функции order_by фреймворка CodeIgniter, например, здесь - http://code-igniter.ru/user_guide/database/active_record.html):
Я думаю, так. Сперва записи будут отсортированы по убыванию по полю page_menu_order и в конце выборки окажутся записи со значением = 0. У этих записей (с page_menu_order = 0) будет обратная сортировка по page_date_publish. Другой вопрос, что при наличии записей, например, с page_menu_order = 1 они между собой тоже будут обратно отсортированы по page_date_publish и я не знаю, подходит ли вам такой вариант.
Если этот вариант не сработает как вам нужно, то других идей кроме как написать полностью свою функцию выборки записей у меня нет.
Илья, предложенный Вами вариант приведет к ошибке синтаксиса SQL.
Для сортировки по нескольким полям с использованием функции получения записей mso_get_pages() должно быть так.
searchingman, каюсь, не проверял. Спасибо, что подправили!
Илья, searchingman, СПАСИБО!!! Добавила один вопрос в тему.
Катя, может проще у всех записей с 'page_menu_order' = 0 установить какое-нибудь большое значение, н-р, 9999.
Для этого нужен 1 запрос в БД.
searchingman, скажу больше, меня и вот этот вариант полностью устраивает:
Кстати, вариант с установкой 9999 очень интересный. Подскажите, пожалуйста, как сделать такой запрос, используя phpMyAdmin.
Вариант с page_menu_order desc тоже рабочий. Просто нумерацию лучших записей нужно начинать с большого числа, например - 9999, 9998, 9997 и тд.
Запрос
Важно! Перед любыми манипуляциями с БД нужно иметь архив БД.
searchingman, СПАСИБО!!!
ИМХО, получился очень полезный топик. Тк теперь мы имеем возможность показать нужные записи выше других!
На мой взгляд, это один из лучших топиков на МаксХаб. Тк дается уже готовое решение. Иди и внедряй =)))