Хаки ДЛЕ исправляем ББ-коды в имени спойлера


Если вы используете спойлеры на вашем сайте и с ужасом увидели, примерную картину как на изображении выше, а точнее не рабочие ББ-коды в имени спойлера. Тогда из рубрики хаки dle «ББ-коды в имени спойлера» попробуем исправить данную ошибку разработчиков.

Советую всем пройтись по новостям, особенно в старых публикациях не рушатся ли у вас все бб-коды или подобное решение вы сможете применить, чтобы добавить BBcode для других функций. Как оказалось это из-за того что в названии спойлера раньше использовались бб-коды, а в новых версиях DLE это вызывает ошибку и не правильную обработку бб-кодов, в следствии чего все коды в новости не обрабатываются.

Причина этой проблемы заключена в том что бб-код спойлера обрабатывается раньше чем коды форматирования текста.

И казалось бы, продумать изначально, чтобы такого безобразия не появлялось довольно таки не сложно, но по каким-то причинам этот момент в DLE остался не продуманным.
Так давайте же исправим это безобразие :) хак для dle исправляем ББ-коды в имени спойлера

Файл: /engine/classes/parse.class.php
Найти и вырезать(копировать и потом удалить):

Изменения для DLE 9.6 и ниже

        $count_start = substr_count ($source, "[spoiler");
        $count_end = substr_count ($source, "[/spoiler]");

        if ($count_start AND $count_start == $count_end) {
            $source = str_ireplace( "[spoiler=]", "[spoiler]", $source );
            $source = preg_replace( "#[spoiler]#ie", "$this->build_spoiler('')", $source );
            $source = preg_replace( "#[spoiler=(.+?)]#ie", "$this->build_spoiler('\1')", $source );
            $source = preg_replace( "#[/spoiler]#i", "<!--spoiler_text_end--></div><!--/dle_spoiler-->", $source );

        }


Изменения для DLE 9.7

        $count_start = substr_count ($source, "[spoiler");
        $count_end = substr_count ($source, "[/spoiler]");

        if ($count_start AND $count_start == $count_end) {
            $source = str_ireplace( "[spoiler=]", "[spoiler]", $source );

            if ( !$this->allow_code ) {
                $source = preg_replace( "#[spoiler](.+?)[/spoiler]#ies", "$this->clear_div_tag(array('title' => '', 'txt' => '\1'), 'spoiler')", $source );
                $source = preg_replace( "#[spoiler=(.+?)](.+?)[/spoiler]#ies", "$this->clear_div_tag(array('title' => '\1', 'txt' => '\2'), 'spoiler')", $source );
            }

            $source = preg_replace( "#[spoiler]#ie", "$this->build_spoiler('')", $source );
            $source = preg_replace( "#[spoiler=(.+?)]#ie", "$this->build_spoiler('\1')", $source );
            $source = preg_replace( "#[/spoiler]#i", "<!--spoiler_text_end--></div><!--/dle_spoiler-->", $source );

        }


Найти:
if( $this->allow_url ) {


Добавить выше вырезанный ранее код!

Этим мы сделали сначала обработку кодов форматирования текста, а уже после обработку спойлера.

Теперь давайте вырежем эти коды форматирования из названия спойлера.
В том же файле найти:
    function build_spoiler($title = "") {
        global $lang;
        
        $title = trim( $title );


Добавить ниже:

        $title = strip_tags( $title );


Теперь в админ панели движка DataLife Engine, следует создать копию Базы Данных, а после запустить // Перестроение публикаций //, что бы исправить во всех старых новостях эту проблему.

Автор: MSW 0-web ru
Версия DLE: 9.*

Хаки ДЛЕ исправляем ББ-коды в имени спойлера

Hak-DLE-BB-kody-v-imeni-spoylera.rar [16,75 Kb] (cкачиваний: 38)
00

Комментарии (0)

Оставить комментарий

Кликните на изображение чтобы обновить код, если он неразборчив