Хак Фикс для подкатегорий с одинаковым URL [DLE 9.x - 10.x]

Тема в разделе "DLE", создана пользователем Gameer, 21 ноя 2015.

Информация :
Актуальная версия DataLife Engine 11.1
( Final Release v.11.1 | Скачать DataLife Engine | Скачать 11.1 demo )
Нужно ли обновляться | Как обновиться | Изменения в шаблонах
> Нет русских символов <
[Приватная тема DLE (Все подробности в ЛС к модератору раздела)]

Версии 10.0 и ниже - уязвимы!

Локализации | F.A.Q. | Внешний вид
Правила раздела | Правила форума
Обсуждение хайда карается баном!
В каждом сообщении указывайте версию DLE, которого они касаются!
Модераторы: killoff
  1. Gameer

    Gameer Постоялец Нарушитель

    Регистр.:
    25 апр 2014
    Сообщения:
    99
    Симпатии:
    65
    corcat.jpg
    Данный хак решает проблему для категорий у которых должен быть с одинаковым URL но сами они находятся как подкатегории в основных категориях.

    Для тех кто не понимает, объясняю примером. К примеру есть две категории основные :
    1. Фильмы
    2. Сериалы
    У категории Фильмы есть подкатегория Боевик, который имеет url - boevik. На сайте это видно как /film/boevik. Теперь хотим создать ту же категорию только для основной категории Сериалы. На что получим ошибку Что данная категория уже есть. Но это не так, для сериалов ее нет только для фильмов.

    Этот хак, решит эту проблему.

    Открываем /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) {
        
    $arr_cat = array();
        foreach ( 
    $cat_info as $cats ) {
            if( 
    $cats['alt_name'] == $category $arr_cat[] = $cats['id'];
        }
       
        if(
    count($arr_cat) > 1)
        {
            if(
    $_GET['category'])
            {
                
    $name_first_cat explode('/'$_GET['category']); $name_first_cat $name_first_cat[0];
                foreach(
    $arr_cat as $first_cat)
                {
                    if(
    $cat_info[$cat_info[$first_cat]['parentid']]['alt_name'] == $name_first_cat) return $first_cat;
                }
            }
        }
        else
            return 
    $arr_cat[0];
        return 
    false;
    }
    Далее открываем /engine/inc/categories.php находим и удаляем код :
    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" );
    }
    Указывать ссылки только по полным путям /film/boevik и /serial/boevik. Если же перейти просто на /boevik то выдаст первую категорию которая ближе в массиве.

    Автор жи есть : Gameer
     
    candro333 нравится это.