Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

Автоматическая генерация двух буквенных каталогов в dle

Тема в разделе "Хаки DLE", создана пользователем DLEPlugins, 27 сен 2017.

27.09.17 в 12:12
27.09.17 в 12:12
0
931
3
  1. TopicStarter Overlay
    DLEPlugins

    Кодер

    Регистрация:
    29 ноя 2015
    Сообщения:
    1.608
    Лучших ответов:
    8
    Рейтинги:
    +1.195 / 9 / -0
    На одном из сайтов понадобилось добавить второй буквенный каталог, по которому в дальнейшем будет идти сортировка новостей. Но вставлять в каждой новости вручную эти две буквы занимает много времени. Разработал хак, автоматизирующий этот процесс. Первую букву будет брать на основе данных из доп поля с оригинальным/анлийским/японским/прочим языком, вторую же будет брать на основе доп поля с русским названием новости. Установка легкая, занимает пару минут. Приступим?

    1. Автор PunPun . Открываем /engine/engine.php и находим код :
    PHP:
    $sql_select "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " PREFIX "_post p LEFT JOIN " PREFIX "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}symbol = '$catalog' AND approve=1" $where_date " ORDER BY " $news_sort_by " " $news_direction_by " LIMIT " $cstart "," $config['news_number'];
    $sql_count "SELECT COUNT(*) as count FROM " PREFIX "_post WHERE {$stop_list}symbol = '$catalog' AND approve=1" $where_date;
    ЗАМЕНЯЕМ на код
    PHP:
    $sql_select "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " PREFIX "_post p LEFT JOIN " PREFIX "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}symbol REGEXP '[[:<:]]($catalog)[[:>:]]' AND approve=1" $where_date " ORDER BY " $news_sort_by " " $news_direction_by " LIMIT " $cstart "," $config['news_number'];
    $sql_count "SELECT COUNT(*) as count FROM " PREFIX "_post WHERE {$stop_list}symbol REGEXP '[[:<:]]($catalog)[[:>:]]' AND approve=1" $where_date;
    2. Автор Я, DomiTori . Открываем /engine/modules/show.full.php и ищем в нем код:
    PHP:
    $tpl->set'{full-story}'$row['full_story'] );
    ниже вставляем код
    PHP:
    if (!$row['symbol'] AND $xfieldsdata['name_original'] AND $xfieldsdata['name_russian'] ) {
              
                
    $new_symbol mb_strtolower(dle_substrhtmlspecialcharsstrip_tagsstripslashestrim$xfieldsdata['name_original'] ) ) ), ENT_QUOTES$config['charset'] ), 01$config['charset'] )) . "|" mb_strtolower(dle_substrhtmlspecialcharsstrip_tagsstripslashestrim$xfieldsdata['name_russian'] ) ) ), ENT_QUOTES$config['charset'] ), 01$config['charset'] ));
              
                
    $db->query"UPDATE " PREFIX "_post SET symbol='$new_symbol' WHERE id='{$newsid}'");
              
            }
            elseif (!
    $row['symbol'] AND !$xfieldsdata['name_original'] ) {
              
                
    $new_symbol mb_strtolower(dle_substrhtmlspecialcharsstrip_tagsstripslashestrim$xfieldsdata['name_russian'] ) ) ), ENT_QUOTES$config['charset'] ), 01$config['charset'] ));
              
                
    $db->query"UPDATE " PREFIX "_post SET symbol='$new_symbol' WHERE id='{$newsid}'");
              
            }
            elseif (!
    $row['symbol'] AND !$xfieldsdata['name_russian'] ) {
              
                
    $new_symbol mb_strtolower(dle_substrhtmlspecialcharsstrip_tagsstripslashestrim$xfieldsdata['name_original'] ) ) ), ENT_QUOTES$config['charset'] ), 01$config['charset'] ));
              
                
    $db->query"UPDATE " PREFIX "_post SET symbol='$new_symbol' WHERE id='{$newsid}'");
              
            }
    В коде, который вставили выше name_original - заменяем на латинское название доп поля, в котором содержится название новости (фильма, сериала) на "нерусском", а также name_russian - заменяем на латинское название доп поля, в котором содержится название новости (фильма, сериала) на русском.
    Хак сработает так: при входе в полную новость будет проверятся не пустая ли ячейка с символом, если пустая то будет заполняться данными из доп полей.

    Что делать если я парсером уже заполнял символ, как использовать этот хак?
    - Идем в админку-редактирование новостей-выделить все новости. Далее выбераем в списке массовых действий пункт "Изменить символьный код". Жмем "Выполнить". Оставляем поле с символьным кодом пустое, жмем сохранить. Так проделываем для всех новостей.

    И что будет, когда я установлю этот хак?
    - Раньше, из коробки, была доступна сортировка по самой первой букве из тайтла новости. Теперь сортировки будет две, по первой букве англ. названия и по первой букве русского названия. К примеру мы добавили фильм "Терминатор / Terminator". Мы сможет отсортировать новости так
    и так
    На пиво и чипсы можно отблагодарить рублем на вебмани.
     
    #1 DLEPlugins, 27 сен 2017
    Последнее редактирование: 27 сен 2017
    • Нравится Нравится x 3
Яндекс.Метрика