Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Сортировка custom работает не корректно, как исправить?

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


     27.01.2016    Все вопросы » Общие вопросы по PHP    1433

вопрос
Доброго времени суток!
Столкнулся с проблемой сортировки 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
Юзер

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

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

xatabich10
Юзер

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

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

PunPun
Эксперт

PunPun - 27 января 2016 05:31 -


well​

joydo
Юзер

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

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

xatabich10
Юзер

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

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

xatabich10
Юзер

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

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

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

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

наверх