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