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

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

Ускоряем работу dle - тег catlist

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

20.05.17 в 11:32
08.08.18 в 22:29
6
853
6
  1. TopicStarter Overlay
    PunPun

    PunPun Гуру

    Регистрация:
    11 июн 2015
    Сообщения:
    6.881
    Лучших ответов:
    9
    Рейтинги:
    +3.573 / 17 / -45
    Стандартно DLE использует проверку на поиск в массиве функцию in_array которая сама по себе "медленная" и быстрее использовать проверку по ключу через isset.
    Вот так выполняется код DLE для новостей которые используют тег [catlist в обширном количестве.
    Код:
    [catlist=1,2,3,4,5,6,7,8,9,10,11]1[/catlist]
    [catlist=2]2[/catlist]
    [catlist=3]3[/catlist]
    [catlist=4]4[/catlist]
    [catlist=5]5[/catlist]
    [catlist=6]6[/catlist]
    [catlist=7]7[/catlist]
    [catlist=8]8[/catlist]
    [catlist=9]9[/catlist]
    [catlist=10]10[/catlist]
    [catlist=11]11[/catlist]
    
    И с таким набором категорий у новостей
    upload_2017-5-20_11-1-59.png
    upload_2017-5-20_10-39-46.png
    А вот так с новым кодом
    upload_2017-5-20_10-40-50.png
    Теперь давайте подумаем, а что если у нас на одной странице порядка 30 новостей, включая custom, и используется везде тег [catlist. Согласен нагрузка не большая, но оптимизация всегда нужна.

    Для этого нужно сделать:
    1. Открываем /engine/modules/functions.php и находим код
    PHP:
    function check_category$matches=array() ) {
    Выше вставляем
    PHP:
    function check_catlist$matches=array(), $cat_list ) {
        
    $cat_list array_flip($cat_list);
        if(
    $matches[1] == "catlist")
            
    $action true;
        else
            
    $action false;
        if(
    substr_count($matches[2],","))
        {
            
    $cat_array explode(","$matches[2]);
            foreach(
    $cat_array as $value)
            {
                if(isset(
    $cat_list[$value]))
                    if(
    $action)
                        return 
    $matches[3];
                    else
                        return 
    "";
            }
        }
        else
        {
             if(isset(
    $cat_list[$matches[2]]))
                if(
    $action)
                    return 
    $matches[3];
                else
                    return 
    "";
        }
        if(
    $action)
            return 
    "";
        else
            return 
    $matches[3];
    }
    2. Открываем /engine/modules/show.short.php show.full.php show.custom.php находим
    PHP:
    if( strpos$tpl->copy_template"[catlist=" ) !== false ) {
        
    $tpl->copy_template preg_replace_callback "#\\[(catlist)=(.+?)\\](.*?)\\[/catlist\\]#is""check_category"$tpl->copy_template );
    }

    if( 
    strpos$tpl->copy_template"[not-catlist=" ) !== false ) {
        
    $tpl->copy_template preg_replace_callback "#\\[(not-catlist)=(.+?)\\](.*?)\\[/not-catlist\\]#is""check_category"$tpl->copy_template );
    }
    Меняем на
    PHP:
    if( strpos$tpl->copy_template"[catlist=" ) !== false ) {
        
    $tpl->copy_template preg_replace_callback "#\\[(catlist)=(.+?)\\](.*?)\\[/catlist\\]#is", function($data) use ($cat_list)
        {
            return 
    check_catlist($data$cat_list);
        }, 
    $tpl->copy_template );
    }

    if( 
    strpos$tpl->copy_template"[not-catlist=" ) !== false ) {
        
    $tpl->copy_template preg_replace_callback "#\\[(not-catlist)=(.+?)\\](.*?)\\[/not-catlist\\]#is", function($data) use ($cat_list)
        {
            return 
    check_catlist($data$cat_list);
        }, 
    $tpl->copy_template );
    }
    Вот и все.
    Автор: https://punpun.name/ (я)
     
    • Нравится Нравится x 6
    • Полезно Полезно x 1
  2. evgfreeman

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

    Регистрация:
    26 апр 2016
    Сообщения:
    1.563
    Лучших ответов:
    1
    Рейтинги:
    +847 / 38 / -35
    Спасибо.
     
    • Нравится Нравится x 1
  3. Frosty

    Frosty Бывалый

    Регистрация:
    31 мар 2017
    Сообщения:
    871
    Лучших ответов:
    1
    Рейтинги:
    +172 / 14 / -35
    Запил себе )
     
  4. ifreez

    ifreez Посетитель

    Регистрация:
    16 янв 2017
    Сообщения:
    59
    Лучших ответов:
    0
    Рейтинги:
    +23 / 3 / -0
    А если у меня стоит твой хак и я вывожу так:
    {cat:1} или {cat:1,2,3} - выведет ссылку на эти категории которые указаны.
    [cat:1] текст [/cat] или [cat:1,2,3] текст [/cat] - выведет текст внутри тегов если категория выбрана для новости.
    http://zerocoolpro.biz/forum/threads/xaki-dlja-datalife-engine.7270/

    нужно делать правки? или и так все ок?
     
  5. TopicStarter Overlay
    PunPun

    PunPun Гуру

    Регистрация:
    11 июн 2015
    Сообщения:
    6.881
    Лучших ответов:
    9
    Рейтинги:
    +3.573 / 17 / -45
    Эта правка будет изменена отдельно.
     
  6. ifreez

    ifreez Посетитель

    Регистрация:
    16 янв 2017
    Сообщения:
    59
    Лучших ответов:
    0
    Рейтинги:
    +23 / 3 / -0
    а долго еще ждать?)
     
    • Смешно Смешно x 2
    • Нравится Нравится x 1
    • Согласен Согласен x 1
  7. Mr.S

    Mr.S Новичок

    Регистрация:
    5 ноя 2017
    Сообщения:
    29
    Лучших ответов:
    0
    Рейтинги:
    +1 / 1 / -2
    Спасибо, поставил.
     
Похожие темы
  1. PhoenixProject
    Ответов:
    12
    Просмотров:
    1.708
  2. PunPun
    Ответов:
    22
    Просмотров:
    4.080
  3. never3d22
    Ответов:
    10
    Просмотров:
    421
  4. nginx
    Ответов:
    0
    Просмотров:
    266
  5. byroot
    Ответов:
    5
    Просмотров:
    440
Загрузка...
Яндекс.Метрика