Главная » Хаки DLE » Хак ББ-коды в имени спойлера

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

  • Хаки DLE

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

На сайтах, использующих актуальные версии скрипта 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 );


Добавить ниже:
#*** FIX Title Spoiler by MSW * start ***#
$title = strip_tags( $title );
#*** FIX Title Spoiler by MSW * stop ***#



После в админке DLE можно запустить перестроение публикаций, что бы исправить во всех старых новостях эту проблему.

Автор: MSW

источник: 0-web.ru

Ключевые слова по теме Хак ББ-коды в имени спойлера: ББ-код, хак, спойлер, DLE, MSW