Внимание! Форум временно закрыт. Все вопросы вы можете задать на странице MaxSite CMS в Github

Как отсортировать полученные mso_get_pages() страницы?

Только для тех, кто понимает.
Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Как отсортировать полученные mso_get_pages() страницы?

Сообщение nicothin » 22 дек 2013, 14:48

Есть задача: на главной выводить не просто поток записей, а такой поток, в котором все помеченные мета-полем «избранное» записи всегда предшествуют непомеченным таковым метаполем.
Вопрос: как, в какую сторону копать?

Пробовал перетрясти результат (получаемый ф-ей mso_get_pages()), но при таком подходе на каждой странице пагинации присутствуют и «избранные», и неизбранные. Делаю вывод, что или сортировать нужно на этапе получения, или какой-то иной способ применить.

Код, который выдает и избранных и неизбранных на каждой странице пагинации:

Код: Выбрать все

$par = array(
   'limit' => mso_get_option('home_limit_post', 'templates', '7'),
   'cut' => mso_get_option('more', 'templates', tf('Читать полностью »')),
   'get_page_count_comments' => false,
   'order' => 'page_menu_order',
);
$pages = mso_get_pages($par, $pagination);

if($pages) {
   
   // перетрясем массив страниц
   $pages_favorites = array();
   $pages_not_favorites = array();
   foreach($pages as $page) {
      if( isset($page['page_meta']['good'][0]) and $page['page_meta']['good'][0] ) {
         $pages_favorites[$page['page_id']] = $page;
      }
      else {
         $pages_not_favorites[$page['page_id']] = $page;
      }
   }
   $pages = array_merge($pages_favorites, $pages_not_favorites);

// тут вывод страниц из массива $pages
}

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Как отсортировать полученные mso_get_pages() страницы?

Сообщение MAX » 22 дек 2013, 15:18

Думаю, что правильно получать все записи без критерия избранности, а после пересортировать $pages. То есть алгоритм верный.

Если проблема с пагинацией, то проверьте что получается в $pagination.

Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Как отсортировать полученные mso_get_pages() страницы?

Сообщение nicothin » 22 дек 2013, 15:55

нет, алгоритм не верный (дошло до меня): из БД будет получено только 'limit' => mso_get_option('home_limit_post', 'templates', '7') записей, а это, как-бэ намекает мне, что сортировать все записи и помещать в начало избранные не выйдет :)
придется получать все записи, сортировать, потом обрезать массив в соответствии с пагинацией (той страниецей, на которой посетитель)

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Как отсортировать полученные mso_get_pages() страницы?

Сообщение MAX » 22 дек 2013, 16:06

Почему неверно? Получаем первые 7 записей, в них ищем избранные — ставим их выше. На следующей странице пагинации всё повторяется.

Если же стоит задача вывести два списка, то проще получить вначале первый (избранное), потом второй. Выводить отдельно. Но как тогда пагинацию прикрутить неясно — она будет только под один список.

Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Как отсортировать полученные mso_get_pages() страницы?

Сообщение nicothin » 22 дек 2013, 18:36

потому, что это должен быть единый поток, разделенный на несколько страниц и в начале этого потока — избранные, в конце — не избранные, от пагинации не зависит.
уже свой алгоритм пагинации написал, буду получать все записи, сортировать и обрезать массив по правилам пагинации, исходя из mso_segment(3).

Аватар пользователя
MAX
Администратор
Сообщений: 3179
Зарегистрирован: 31 янв 2009, 19:02

Re: Как отсортировать полученные mso_get_pages() страницы?

Сообщение MAX » 22 дек 2013, 21:11

Так неоптимально. Тогда проще использовать получение записе по типу tag. Там и order задать.

Аватар пользователя
nicothin
Модератор
Сообщений: 521
Зарегистрирован: 09 мар 2009, 21:55

Re: Как отсортировать полученные mso_get_pages() страницы?

Сообщение nicothin » 22 дек 2013, 21:24

не, у меня order по «Порядок записи».
да и сделал ужо.


Вернуться в «if (!is_type('Programmer')) die('not for you');»

Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей