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

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

Решение проблемы для подкатегорий с одинаковым url(upd)

Тема в разделе "Хаки DLE", создана пользователем hent4iboys, 4 окт 2018.

04.10.18 в 03:54
22.01.19 в 16:08
5
386
1
  1. TopicStarter Overlay
    hent4iboys

    hent4iboys Бывалый

    Регистрация:
    31 авг 2018
    Сообщения:
    507
    Лучших ответов:
    1
    Рейтинги:
    +72 / 16 / -33
    Идем в /engine/modules/functions.php и находим эту функцию:

    PHP:
    function get_ID($cat_info$category) {
        foreach ( 
    $cat_info as $cats ) {
            if( 
    $cats['alt_name'] == $category ) return $cats['id'];
        }
        return 
    false;
    }
    Комментируем её и вставляем ниже:
    PHP:
    function get_ID($cat_info$category) {
        
    $catsarray = array();
        foreach (
    $cat_info as $cats) {
            if(
    $cats['alt_name'] == $category) {
                
    $catsarray[] = $cats['id'];
            }
        }
        if(
    count($catsarray) > 1) {
            if(
    $_GET['category']) {
                
    $catname explode('/'$_GET['category']);
                
    $catname $catname[count($catname)-2];
                foreach(
    $catsarray as $cat) {
                    if(
    $cat_info[$cat_info[$cat]['parentid']]['alt_name'] == $catname) {
                        return 
    $cat;
                    }
                }
            }
        } else {
            return 
    $catsarray[0];
        }
        return 
    false;
    }
    Как можно заметить, код очень прост. Мы вместо того, чтобы возвращать сразу ID категории, сначала собираем массив, находим в нем категорию родителя и возвращаем скорректированный ответ. Если будет интересно - могу дописать построчно комментарии :)

    Далее идем в /engine/inc/categories.php и комментируем 2 кода, которые отвечают за проверку:
    PHP:
    $row $db->super_query"SELECT alt_name FROM " PREFIX "_category WHERE alt_name ='{$alt_cat_name}'" );
     
    if( 
    $row['alt_name'] ) {
        
    msg"error"$lang['cat_error'], $lang['cat_eradd'], "?mod=categories" );
    }
    PHP:
    $row $db->super_query"SELECT id, alt_name FROM " PREFIX "_category WHERE alt_name = '$alt_cat_name'" );
     
    if( 
    $row['id'] and $row['id'] != $catid ) {
        
    msg"error"$lang['cat_error'], $lang['cat_eradd'], "javascript:history.go(-1)" );
    }
    Почему два? Один проверяет совпадение по базе в момент добавления категории, а второй при редактировании. Казалось бы на этом всё. Но стоит лишь на сайте активировать кеширование и наблюдаем, что на всех совпадающих названиях из кеша достается последняя закешированная категория!

    Давайте поправим добавив в логику кеширования ID категории. Идем в /engine/engine.php и ищем:
    PHP:
    $active dle_cache"news"$cache_id $cache_prefixtrue );
    И добавляем $category_id. В итоге:
    PHP:
    $active dle_cache"news"$category_id $cache_id $cache_prefixtrue );
    Пару десятков строк ниже находим:
    PHP:
    create_cache "news"$tpl->result['content'], $cache_id $cache_prefixtrue );
    И повторяем трюк с категорией:
    PHP:
    create_cache "news"$tpl->result['content'], $category_id $cache_id $cache_prefixtrue );
    взято с одного форума..
    Screenshot_1.png
     
    #1 hent4iboys, 4 окт 2018
    Последнее редактирование: 4 окт 2018
    • Нравится Нравится x 1
  2. PunPun

    PunPun Гуру

    Регистрация:
    11 июн 2015
    Сообщения:
    7.314
    Лучших ответов:
    17
    Рейтинги:
    +3.889 / 40 / -83
    p.s автор я. спасибо за указание автора
     
  3. TopicStarter Overlay
    hent4iboys

    hent4iboys Бывалый

    Регистрация:
    31 авг 2018
    Сообщения:
    507
    Лучших ответов:
    1
    Рейтинги:
    +72 / 16 / -33
    соре,на том форуме не было написано то что автор ты
    upd : вставил тебя
     
    • Нравится Нравится x 1
  4. byroot

    Команда форума Администратор VIP Кинотрафик v2

    Регистрация:
    10 окт 2015
    Сообщения:
    10.517
    Лучших ответов:
    38
    Рейтинги:
    +4.306 / 36 / -39
  5. PunPun

    PunPun Гуру

    Регистрация:
    11 июн 2015
    Сообщения:
    7.314
    Лучших ответов:
    17
    Рейтинги:
    +3.889 / 40 / -83
    • Нравится Нравится x 1
  6. sunx

    sunx Бывалый

    Регистрация:
    9 ноя 2015
    Сообщения:
    138
    Лучших ответов:
    1
    Рейтинги:
    +79 / 7 / -19
    Плагин
     

    Вложения:

Яндекс.Метрика