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

Рубрика: Хаки для DLE » Хак DLE 11.2, 11.1, 11.0, 10.6, 10.5, 10.4, 10.3, 10.2, 10.1, 10.0, 9.8, 9.7, 9.6, 9.5, 9.4, 9.3, 9.2, 9.0
Хаки ДЛЕ исправляем ББ-коды в имени спойлера
Если вы используете спойлеры на вашем сайте и с ужасом увидели, примерную картину как на изображении выше, а точнее не рабочие ББ-коды в имени спойлера. Тогда из рубрики хаки 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.*

Хаки ДЛЕ исправляем ББ-коды в имени спойлера
  • 60
Рубрика: DLE хаки » Хак для DLE
Ранее » Category Related News« Далее 7 видов елочных украшений для вашего сайта на DLE
Добавление комментарияОставить комментарий