Редактор темы

Реклама
Реклама

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

  • Автор темы Автор темы PunPun
  • Дата начала Дата начала

PunPun

VIP Кинотрафик v2
Регистрация
11 Июн 2015
Сообщения
7.450
Рейтинг реакций
3.195
Баллы
113
1/3
Автор темы
Стандартно 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://сайт lazydev/ (я)
 
Запил себе )
 
А если у меня стоит твой хак и я вывожу так:
{cat:1} или {cat:1,2,3} - выведет ссылку на эти категории которые указаны.
[cat:1] текст [/cat] или [cat:1,2,3] текст [/cat] - выведет текст внутри тегов если категория выбрана для новости.
http://zerocoolpro.biz/forum/threads/xaki-dlja-datalife-engine.7270/

нужно делать правки? или и так все ок?
 
Автор темы
А если у меня стоит твой хак и я вывожу так:
{cat:1} или {cat:1,2,3} - выведет ссылку на эти категории которые указаны.
[cat:1] текст [/cat] или [cat:1,2,3] текст [/cat] - выведет текст внутри тегов если категория выбрана для новости.
http://zerocoolpro.biz/forum/threads/xaki-dlja-datalife-engine.7270/

нужно делать правки? или и так все ок?
Эта правка будет изменена отдельно.
 
Спасибо, поставил.
 
Ускорился... сайт вообще перестал работать... Спасибо огромное, что уничтожили сайт.. а как теперь вернуть все обратно непонятно. Ставить не рекомендую, только если хотите потерять сайт
 
Ускорился... сайт вообще перестал работать... Спасибо огромное, что уничтожили сайт.. а как теперь вернуть все обратно непонятно. Ставить не рекомендую, только если хотите потерять сайт
У тебя кривые руки, все работает, проверено лично.
 
Автор темы
Ускорился... сайт вообще перестал работать... Спасибо огромное, что уничтожили сайт.. а как теперь вернуть все обратно непонятно. Ставить не рекомендую, только если хотите потерять сайт
Если дегенерат с левыми руками то удали свой сайт и выбрось комп, таким тут не место. Удачи, и всего хорошего 😉
 
актуально ли для версии 13.1?)
 

Похожие темы Последние темы Популярные темы

Назад
Сверху