Вы не зашли.
Страницы 1
Естли возможность при помощи небольшого хака, дать возможность пользователям сортировать новости по дате, id, алфавиту?
а так же выбор пользователем колличества новостей на странице
Изменено graf (2009-08-23 12:30:42)
Не в сети
Есть.
Хак будет не то чтобы очень уж небольшой,.. но можно.
Речь пойдёт про 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' менять). Но это уж ты сам проверь
Не в сети
А плагином?
Не в сети
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>
Не в сети
Хм.. действительно интересный вопрос получается.
Если надо только на главной такое сделать - можно направлять просто на "/", а вот если подобный фильтр нужно делать для любых новостей, то без плагина-фильтра не обойтись, нужно будет цепляться на событие onBeforeShow
Не в сети
как поступать при использовании ссылок?
т.е. если я передаю ссылкой например сортировку по
http://ngcms.ru/?news_showlist=title%20desc
вопрос
1. в news_showlist надо передавать?
2. пробел заменять на title%20desc?
Изменено graf (2009-10-08 09:58:24)
Не в сети
Страницы 1