тег {custom} Настраиваем сортировку для DLE
Приветствую вас, товарищи веб мастера. Буквально вчера мне пришлось работать со стандартным тегом {custom}, которые украшает DLE своим наличием долгие годы
В принципе, тег довольно функциональный и даже не плохо работает. К тому же он модифицируется сторонними разработчиками. В паблике имеются хаки, которые позволяют выводить картинку в блок информера или обрезать длину заголовка. Но почему-то никто так и не сделал выбор параметра фильтрации и положения новостей. Ещё давно была статья, которая позволяла решить эту проблему. Следуя которой, нужно было написать дополнительное условие к категории, чтобы определить тип сортировки.
Я же решил обойтись без лишних изысков и всё-таки модифицировать кастом, добавив в параметры тега, параметр определяющий поле для сортировки и тип сортировки.
Пожалуй, начнем устанавливать.
Нужно открыть файл /index.php
Найти в нём:
Заменить на:
Пол дела сделано :)
Осталось описать их в функции custom_print();
Для этого открываем файл engine/modules/functions.php
Найти :
Заменить на:
function custom_print($custom_category, $custom_template, $aviable, $custom_from, $custom_limit, $custom_order, $custom_by, $custom_cache, $do) {
Найти:
if( $cat_info[$custom_category]['news_sort'] != "" ) $news_sort = $cat_info[$custom_category]['news_sort']; else $news_sort = $config['news_sort'];
if( $cat_info[$custom_category]['news_msort'] != "" ) $news_msort = $cat_info[$custom_category]['news_msort']; else $news_msort = $config['news_msort'];
Заменить на:
if($custom_order != "")
$news_sort = $custom_order;
elseif( $cat_info[$custom_category]['news_sort'] != "" )
$news_sort = $cat_info[$custom_category]['news_sort'];
else
$news_sort = $config['news_sort'];
if($custom_by != "")
$news_msort = $custom_by;
elseif( $cat_info[$custom_category]['news_msort'] != "" )
$news_msort = $cat_info[$custom_category]['news_msort'];
else
$news_msort = $config['news_msort'];
Теперь тег custom выглядит следующим образом:
{custom category="2,7" template="custom" aviable="global" from="0" limit="10" order="rating" by="DESC" cache="yes"}
Теперь небольшой мануал по возможным параметрам сортировки.
Вышеописанный тег выводит новости сортируя их по рейтингу по убыванию (Сверху новости с самым высоким рейтингом)
Теперь вспомним какие поля имеются у DLE в таблицу dle_post:
title – Если написать в качестве параметра title, то сортировка будет производится по алфавиту. Рекомендую в этом случае в качестве параметра by использовать всётаки ASC, ибо вывод начнётся со статей на букву А.
rating – Рейтинг статьи
date – Дата публикации
comm_num – Количество комментариев
news_read – Количество просмотров
Думаю этого хватит
Теперь о параметре by
Тут есть два возможных варианта:
1.ASC – Сортирует по возрастанию (1,2,3,4,5)
2.DESC – Сортирует по убыванию (5,4,3,2,1)
Собственно на этом всё. Хочу напомнить. Если параметры order="" и by="" оставить пустыми, то будут учиться параметры сортировки в категории, для которой установлен тег (Вроди бы срабатывает, если категория одна). Иначе выводит в связи с конфигурацией движка. Тоесть по дате и по убыванию (Настраивается в конфиге движка :)
Хак тестировался на актуальной версии движка (9.3). Но должен работать и на более ранних версиях.
В принципе, тег довольно функциональный и даже не плохо работает. К тому же он модифицируется сторонними разработчиками. В паблике имеются хаки, которые позволяют выводить картинку в блок информера или обрезать длину заголовка. Но почему-то никто так и не сделал выбор параметра фильтрации и положения новостей. Ещё давно была статья, которая позволяла решить эту проблему. Следуя которой, нужно было написать дополнительное условие к категории, чтобы определить тип сортировки.
Я же решил обойтись без лишних изысков и всё-таки модифицировать кастом, добавив в параметры тега, параметр определяющий поле для сортировки и тип сортировки.
Пожалуй, начнем устанавливать.
Нужно открыть файл /index.php
Найти в нём:
if (stripos ( $tpl->copy_template, "{custom" ) !== false) {
$tpl->copy_template = preg_replace ( "#\{custom category=['"](.+?)['"] template=['"](.+?)['"] aviable=['"](.+?)['"] from=['"](.+?)['"] limit=['"](.+?)['"] cache=['"](.+?)['"]\}#ies", "custom_print('\1', '\2', '\3', '\4', '\5', '\6', '{$dle_module}')", $tpl->copy_template );
}
$tpl->copy_template = preg_replace ( "#\{custom category=['"](.+?)['"] template=['"](.+?)['"] aviable=['"](.+?)['"] from=['"](.+?)['"] limit=['"](.+?)['"] cache=['"](.+?)['"]\}#ies", "custom_print('\1', '\2', '\3', '\4', '\5', '\6', '{$dle_module}')", $tpl->copy_template );
}
Заменить на:
if (strpos ( $tpl->copy_template, "{custom" ) !== false) {
$tpl->copy_template = preg_replace ( "#\{custom category=['"](.+?)['"] template=['"](.+?)['"] aviable=['"](.+?)['"] from=['"](.+?)['"] limit=['"](.+?)['"] order=['"](.+?)['"] by=['"](.+?)['"] cache=['"](.+?)['"]\}#ies", "custom_print('\1', '\2', '\3', '\4', '\5', '\6', '\7', '\8', '{$dle_module}')", $tpl->copy_template );
}
$tpl->copy_template = preg_replace ( "#\{custom category=['"](.+?)['"] template=['"](.+?)['"] aviable=['"](.+?)['"] from=['"](.+?)['"] limit=['"](.+?)['"] order=['"](.+?)['"] by=['"](.+?)['"] cache=['"](.+?)['"]\}#ies", "custom_print('\1', '\2', '\3', '\4', '\5', '\6', '\7', '\8', '{$dle_module}')", $tpl->copy_template );
}
Пол дела сделано :)
Осталось описать их в функции custom_print();
Для этого открываем файл engine/modules/functions.php
Найти :
function custom_print($custom_category, $custom_template, $aviable, $custom_from, $custom_limit, $custom_cache, $do) {
Заменить на:
function custom_print($custom_category, $custom_template, $aviable, $custom_from, $custom_limit, $custom_order, $custom_by, $custom_cache, $do) {
Найти:
if( $cat_info[$custom_category]['news_sort'] != "" ) $news_sort = $cat_info[$custom_category]['news_sort']; else $news_sort = $config['news_sort'];
if( $cat_info[$custom_category]['news_msort'] != "" ) $news_msort = $cat_info[$custom_category]['news_msort']; else $news_msort = $config['news_msort'];
Заменить на:
if($custom_order != "")
$news_sort = $custom_order;
elseif( $cat_info[$custom_category]['news_sort'] != "" )
$news_sort = $cat_info[$custom_category]['news_sort'];
else
$news_sort = $config['news_sort'];
if($custom_by != "")
$news_msort = $custom_by;
elseif( $cat_info[$custom_category]['news_msort'] != "" )
$news_msort = $cat_info[$custom_category]['news_msort'];
else
$news_msort = $config['news_msort'];
Теперь тег custom выглядит следующим образом:
{custom category="2,7" template="custom" aviable="global" from="0" limit="10" order="rating" by="DESC" cache="yes"}
Теперь небольшой мануал по возможным параметрам сортировки.
Вышеописанный тег выводит новости сортируя их по рейтингу по убыванию (Сверху новости с самым высоким рейтингом)
Теперь вспомним какие поля имеются у DLE в таблицу dle_post:
title – Если написать в качестве параметра title, то сортировка будет производится по алфавиту. Рекомендую в этом случае в качестве параметра by использовать всётаки ASC, ибо вывод начнётся со статей на букву А.
rating – Рейтинг статьи
date – Дата публикации
comm_num – Количество комментариев
news_read – Количество просмотров
Думаю этого хватит
Теперь о параметре by
Тут есть два возможных варианта:
1.ASC – Сортирует по возрастанию (1,2,3,4,5)
2.DESC – Сортирует по убыванию (5,4,3,2,1)
Собственно на этом всё. Хочу напомнить. Если параметры order="" и by="" оставить пустыми, то будут учиться параметры сортировки в категории, для которой установлен тег (Вроди бы срабатывает, если категория одна). Иначе выводит в связи с конфигурацией движка. Тоесть по дате и по убыванию (Настраивается в конфиге движка :)
Хак тестировался на актуальной версии движка (9.3). Но должен работать и на более ранних версиях.