Хак [ Хак ] Сортировка новостей по дополнительным полям в стандартном теге {sort} для DLE 10.2 - 11.x

PunPun

Coder
Команда форума
Приватовец
Регистрация
23 Фев 2017
Сообщения
618
Реакции
402
Баллы
63
Хак позволит сортировать новости по дополнительным полям в теге {sort}

Установка хака Сортировка новостей по дополнительным полям в стандартном теге {sort} для DLE
1. Открываем /engine/init.php находим:
PHP:
if( !$config['allow_comments'] ) unset($allowed_sort[3]);
Выше вставляем:
PHP:
$allowed_sort = array_merge($allowed_sort, array("year")); // вписываем сюда название доп полей которые нужны через запятую "year", "director"
2. Открываем /engine/modules/functions.php находим:
PHP:
$allowed_sort = array ('date', 'rating', 'news_read', 'comm_num', 'title' );
Меняем на:
PHP:
$allowed_sort = array ('date', 'rating', 'news_read', 'comm_num', 'title', 'year'); // вписываем сюда название доп полей которые нужны через запятую
Находим:
PHP:
$soft_by_array = array (
Ниже вставляем:
PHP:
'year' => array ( // так делаем для каждого поля, вместо year вписываем название нужного доп поля и вместо год то что будет показано пользователям сайта
    'name' => "год", 'value' => "year", 'direction' => "desc", 'image' => ""
),
3. Открываем /engine/engine.php находим (все разы что найдете):
PHP:
if (isset ( $_SESSION['dle_sort_
Выше вставляем:
PHP:
if(isset ( $_SESSION['dle_sort_' . $do] ) && in_array($_SESSION['dle_sort_' . $do], array("year", "director"))) // вписываем сюда все названия доп полей которые нужны через запятую в кавычках, пример "year", "director"
{
    if(in_array($_SESSION['dle_sort_' . $do], array("year"))) // вписываем сюда название доп поле которые должны быть числами
        $news_sort_by = "ABS(SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  '{$_SESSION['dle_sort_' . $do]}|', -1 ) ,  '||', 1 ))";

    if(in_array($_SESSION['dle_sort_' . $do], array("director"))) // вписываем сюда название доп поле которые должны быть строками, если не нужны удалить две строчки эти
        $news_sort_by = "SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  '{$_SESSION['dle_sort_' . $do]}|', -1 ) ,  '||', 1 )";
}
else
    if (isset ( $_SESSION['dle_sort_' . $do] )) $news_sort_by = $_SESSION['dle_sort_' . $do];
Автор: https://punpun.name/
 
Последнее редактирование:

Башмак

Новичок
Регистрация
24 Фев 2017
Сообщения
43
Реакции
6
Баллы
8
@PunPun, привет, подскажи, в чём может быть проблема?

1.png
 

Juker7

Гуру
Кодер
Приватовец
Регистрация
22 Фев 2017
Сообщения
239
Реакции
133
Баллы
43
@Башмак, ошибка говорит, что нет колонки "year". Подозреваю, что не выполнен последний пункт инструкции.
 

Башмак

Новичок
Регистрация
24 Фев 2017
Сообщения
43
Реакции
6
Баллы
8
@Башмак, ошибка говорит, что нет колонки "year". Подозреваю, что не выполнен последний пункт инструкции.
Всё выполнил и перепроверил 2 раза =) Но ошибку выдаёт совсем на другой файл, на show.short.php
В инструкции даже нет упоминания об этом файле.
 

Башмак

Новичок
Регистрация
24 Фев 2017
Сообщения
43
Реакции
6
Баллы
8
В /engine/init.php

2.png

В /engine/modules/functions.php

3.png
4.png

В /engine/engine.php как и сказано все разы что найдете вставьте выше

5.png


По доп полю (рейтингу) сортирует нормально. А по доп полю по годам ошибку выдаёт =(

6.png
 

Romantv

Новичок
Регистрация
27 Фев 2017
Сообщения
957
Реакции
358
Баллы
63
По тегам как сделать?
 

Bomz

Новичок
Регистрация
28 Фев 2017
Сообщения
121
Реакции
31
Баллы
28
@Башмак, как решил? У меня тоже как у тебя...
 

Башмак

Новичок
Регистрация
24 Фев 2017
Сообщения
43
Реакции
6
Баллы
8
@Bomz, никак. Отказался от данного хака.
 
Сверху Снизу