Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2009-08-23 12:26:51

graf
Участник
Откуда Днепр
Зарегистрирован: 2008-10-13
Сообщений: 394
Рейтинг :   

сортировка новостей

Естли возможность при помощи небольшого хака, дать возможность пользователям сортировать новости по дате, id, алфавиту?
а так же выбор пользователем колличества новостей на странице

Изменено graf (2009-08-23 12:30:42)

Не в сети

#2 2009-08-23 14:12:57

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: сортировка новостей

Есть.
Хак будет не то чтобы очень уж небольшой,.. но можно.
Речь пойдёт про SVN версию.

1. Открываем файл engine/includes/news.php, строки 599-605 (отображение новостей из конкретной категории):

// Set personal `order by` for category
if ($currentCategory['number'])
	$callingParams['showNumber'] = $currentCategory['number'];

// Set number of `news per page` if this parameter is filled in category
if ($currentCategory['orderby'])
	$callingParams['newsOrder'] = $currentCategory['orderby'];

обрати внимание на заполнение параметров $callingParams['showNumber'] и $callingParams['orderby'] - они определяют кол-во новостей на странице и порядок сортировки.

Т.е. можно после них добавить что-то вроде:

if (intval($_REQUEST['number']) > 0)
	$callingParams['showNumber'] = intval($_REQUEST['number']);


if (isset($_REQUEST['order']) && ($_REQUEST['order'] != ''))
	$callingParams['newsOrder'] = $_REQUEST['order'];

обрати внимание - при присвоении $callingParams['newsOrder'] я не делаю проверку правильности и кто-то может подумать, что в этом месте можно сделать SQL инъекцию... подумать - можно, сделать - нельзя.
Потому что в коде функции news_showlist (для которой и готовятся эти параметры) стоит жесткая проверка и если в параметре будет что-то отличное от разрешенных:
id desc, id asc, postdate desc, postdate asc, title desc, title asc
то двиг будет считать, что ему передали "id desc"

2. Теперь надо сделать, чтобы эти параметры работали при постраничном отображении.
Для этого смотрим на строки 607-609:

$paginationParams = checkLinkAvailable('news', 'by.category')?
	array('pluginName' => 'news', 'pluginHandler' => 'by.category', 'params' => array('category' => $catmap[$category]), 'xparams' => array(), 'paginator' => array('page', 0, false)):
	array('pluginName' => 'core', 'pluginHandler' => 'plugin', 'params' => array('plugin' => 'news', 'handler' => 'by.category'), 'xparams' => array('category' => $catmap[$category]), 'paginator' => array('page', 1, false));

После этой строки надо добавить:

if (intval($_REQUEST['number']) > 0)
	$paginationParams['xparams']['number'] = intval($_REQUEST['number']);
if (isset($_REQUEST['order']) && ($_REQUEST['order'] != ''))
	$paginationParams['xparams']['order'] = $_REQUEST['order'];

в итоге при генерации постраничной навигации твои новые переменные также будут учитываться.

3. Ну а теперь остаётся последний момент - каким-либо образом пользователю показывать поля для выбора порядка показа / кол-ва новостей для показа. Тут уж ты сам решишь в каком виде тебе будет удобней.


p.s. Естественно, всё это надо проверять. И у меня есть маленькое подозрение, что с параметрами с пробелами могут быть проблемы (пробелы, возможно, потребуется на '%20' менять). Но это уж ты сам проверь smile

Не в сети

#3 2009-08-23 15:05:02

infinity237
Модератор
Откуда Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2,674
Рейтинг :   176 
Сайт

Re: сортировка новостей

А плагином?

Не в сети

#4 2009-08-24 00:26:54

graf
Участник
Откуда Днепр
Зарегистрирован: 2008-10-13
Сообщений: 394
Рейтинг :   

Re: сортировка новостей

спасибо. после наших праздников вкурю. попробуе што и как

Не в сети

#5 2009-09-24 22:12:22

graf
Участник
Откуда Днепр
Зарегистрирован: 2008-10-13
Сообщений: 394
Рейтинг :   

Re: сортировка новостей

USER  пишет:

3. Ну а теперь остаётся последний момент - каким-либо образом пользователю показывать поля для выбора порядка показа / кол-ва новостей для показа. Тут уж ты сам решишь в каком виде тебе будет удобней.

Допустим такая форма:

<form action="???" method="get">
<select name="number">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
</select>
<select name="sort">
<option value="postdate asc">postdate asc</option>
<option value="title desc">title desc</option>
<option value="id desc">id desc</option>
</select>
</form>

куда action="" направлять?

или например куда href="" слать

Показать <a href="">10</a>, <a href="">25</a>, <a href="">50</a> новостей. | Сортировать по <a href="">алфавиту</a>, <a href="">дате</a>, <a href="">рейтингу</a>

Не в сети

#6 2009-09-26 13:22:54

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: сортировка новостей

Хм.. действительно интересный вопрос получается.
Если надо только на главной такое сделать - можно направлять просто на "/", а вот если подобный фильтр нужно делать для любых новостей, то без плагина-фильтра не обойтись, нужно будет цепляться на событие onBeforeShow

Не в сети

#7 2009-09-26 15:16:19

graf
Участник
Откуда Днепр
Зарегистрирован: 2008-10-13
Сообщений: 394
Рейтинг :   

Re: сортировка новостей

надо именно для всех новостей, чтобы блок с сортировкой выводить над {mainblock}

Не в сети

#8 2009-10-08 09:56:39

graf
Участник
Откуда Днепр
Зарегистрирован: 2008-10-13
Сообщений: 394
Рейтинг :   

Re: сортировка новостей

как поступать при использовании ссылок?

т.е. если я передаю ссылкой например сортировку по
http://ngcms.ru/?news_showlist=title%20desc

вопрос
1. в news_showlist надо передавать?
2.  пробел заменять на title%20desc?

Изменено graf (2009-10-08 09:58:24)

Не в сети

#9 2009-10-08 10:09:10

graf
Участник
Откуда Днепр
Зарегистрирован: 2008-10-13
Сообщений: 394
Рейтинг :   

Re: сортировка новостей

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

Не в сети

#10 2009-11-10 01:39:51

Евгений
Модератор
Откуда Россия
Зарегистрирован: 2009-04-08
Сообщений: 1,014
Рейтинг :   38 
Сайт

Re: сортировка новостей

vitaly, а задумка вывести в плагин, так и не воплотилась в жизнь?


I NGeneration CMS

Не в сети

#11 2009-11-10 01:52:46

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: сортировка новостей

Евгений, пока ещё нет.

Не в сети

Подвал раздела

Работает на FluxBB