Все для DataLife Engine / DLE хаки / Хак для DLE / Хаки ДЛЕ исправляем ББ-коды в имени спойлера

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


Если вы используете спойлеры на вашем сайте и с ужасом увидели, примерную картину как на изображении выше, а точнее не рабочие ББ-коды в имени спойлера. Тогда из рубрики хаки 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качиваний: 50)
  • 60
Добавить комментарий

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

    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent