Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Сортировка custom работает не корректно, как исправить?

Сортировка custom работает не корректно, как исправить?


     27.01.2016    Общие вопросы по PHP    866

вопрос
Доброго времени суток!
Столкнулся с проблемой сортировки custom, а конкретно xfields="" не сортирует по указанному году и любому другому тексту! Версия DLE 10.5
Как можно это изменить или доделать? Возможно что то недоглядел?
Вот как выглядит custom который я использую.
{custom category="1" xfields="2015" template="static-pages" aviable="static" order="reads" limit="20" cache="yes"}
В dle-news документации... явно дано как это работает, но увы.
xfields выводятся все публикации, содержащие указанное в параметре значение дополнительных полей новостей. Допускается также перечисление значений в параметре через запятую. Например, при использовании {custom xfields="значение 1,значение 2"} будут выведены новости, в которых есть дополнительные поля содержащие "значение 1" или "значение 2".
Источник: тут.
Желательно без правок движка.

Ответил: joydo


Вообще данная функция добавлена с 10.6 (в 10.5 еще нету xfields и xfieldsexclude)
Поэтому берем данную функцию из 10.6
Открыть файл engine/modules/functions.php

Найти

    $where[] = "approve=1";


Вставляем выше

    if( preg_match( "#xfields=['\"](.+?)['\"]#i", $param_str, $match ) ) {
        
        $xf = $match[1];
        
        $match[1] = explode (',', $match[1]);

        $temp_array = array();

        foreach ($match[1] as $value) {

            $value = @$db->safesql ( htmlspecialchars ( strip_tags ( stripslashes ( trim ( $value ) ) ), ENT_QUOTES, $config['charset'] ) );
            $temp_array[] = "p.xfields LIKE '%{$value}%'";

        }        
        
        $where[] = implode(' OR ', $temp_array);
        
        
    } else $xf = "";

    
    if( preg_match( "#xfieldsexclude=['\"](.+?)['\"]#i", $param_str, $match ) ) {
        
        $notxf = $match[1];
        
        $match[1] = explode (',', $match[1]);

        $temp_array = array();

        foreach ($match[1] as $value) {

            $value = @$db->safesql ( htmlspecialchars ( strip_tags ( stripslashes ( trim ( $value ) ) ), ENT_QUOTES, $config['charset'] ) );
            $temp_array[] = "p.xfields NOT LIKE '%{$value}%'";

        }        
        
        $where[] = implode(' AND ', $temp_array);
        
        
    } else $notxf = "";

Комментарии пользователей (6)

misha-koder
7

299 | 77

misha-koder - 27 января 2016 03:13 - Юзер

Вы путаете фильтрацию и сортировку. Перечитайте ещё раз написанное и почерпните из этого суть. А делать сортировку по доп.полям дле - это чистой воды извращение.

xatabich10
1

21 | 1

xatabich10 - 27 января 2016 03:40 - Юзер

Извращением не является сортировка или фильтрация по году! Мне всего то и надо... Из списка имеющихся годов, вывести нужный.

Gameer
226

1124 | 396

Gameer - 27 января 2016 05:31 - Эксперт


Истина в противоречии.​

joydo
4

171 | 31

joydo - 27 января 2016 08:16 - Юзер

***Комментарий удален***

xatabich10
1

21 | 1

xatabich10 - 27 января 2016 19:51 - Юзер

Большое спасибо: JOYDO! Человек без левой трескотни дал полноценный совет!

xatabich10
1

21 | 1

xatabich10 - 28 января 2016 18:56 - Юзер

В общем... проверил предложенный код от JOYDO и как Вы думаете!? Все работает!

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы