Исправление html кода для bb редактора



Если вдруг ваш сайт на DLE случайно поломал отображение верстки в админке, то данная заметка для вас.

Как это обычно бывает?



В настройках сайта используется по-умолчанию BBcode редактор для написания новостей и статических страниц.
Установлена галочка "автоматический перенос строк" и все прекрасно.

Но в какой то момент из-за шила в пятой точке, либо по любой другой причине админ сайта включает на сайте визуальный редактор кода.
Для свежих версий DLE это может быть как LiveEditor (WYSIWYG),


так и TinyMCE (WYSIWYG) и вот тут начинаются чудеса.


Как только вы включаете визуальный редактор (WYSIWYG) то отключается "автоматический перенос строк" для всех новых публикаций и всех тех, что вы будите редактировать.

Появляется избыточный (даже мусорный) html код. Эдакий аналог редактор Word в худщем своем виде.
Через некоторое время вы понимаете - Стандартный (BBcode) редактор значительно лучше и устанавливаете в админке сайта для работы с новостями.

И вот тут сюрприз: ваша публикаци в режиме редактирования превращается в чистый html без переноса строк.
Людям далеким от html эта каша ломает мозг, как жить дальше?

Многие на этот этапе пугаются и включают (WYSIWYG) редактор обратно, продолжают страдать и жевать кактус.

Но есть решение данной проблемы!

Существует мнение что у dle постоянная проблема с этим переключением редакторов, в принципе основные проблемы, это теги:
<br><p><strong>&ndash;

Необходимо поправить парсер, он сам будет выдавать более менее нормальный код.

Для этого нужно


Открыть файл engine/classes/parse.class.php и найти:

 if( !$use_html ) {
  $txt = str_ireplace( "<br>", "\n", $txt );
  $txt = str_ireplace( "<br />", "\n", $txt );
 }


Выше добавить:

 if( !$wysiwig ){
  $txt = preg_replace( "#<p>(.+?)<\/p>#is", "$1\n", $txt );
  $txt = preg_replace( "#<strong>(.+?)<\/strong>#is", "[b]$1[/b]", $txt );
  $txt = str_replace( "<br />", "\n", $txt );
 }



После этих правок то, что раньше было в виде html в режиме (BBcode) - тепреь опять отображается как нужно.
Вот только в тот момент как вы захотите обновить свою версию DLE на самую свежую наши правки опять поломаются.

Но и этого можно избежать.

Нам лишь нужно провести "перестроение публикаций"



После которого код новостей будет восстановлен.


Теперь весь алгоритм по порядку:



1. Проверяем, что в настройках сайта установлен Стандартный (BBcode) редактор
для
- Редактор при добавлении/редактировании новостей в админпанели
- Редактор при добавлении/редактировании статических страниц в админпанели
- Редактор для комментариев и персональных сообщений на сайте
- Редактор при добавлении публикаций на сайте
- Редактор для быстрого редактирования публикаций на сайте

2. Открыть файл engine/classes/parse.class.php и найти:

 if( !$use_html ) {
  $txt = str_ireplace( "<br>", "\n", $txt );
  $txt = str_ireplace( "<br />", "\n", $txt );
 }


Выше добавить:

 if( !$wysiwig ){
  $txt = preg_replace( "#<p>(.+?)<\/p>#is", "$1\n", $txt );
  $txt = preg_replace( "#<strong>(.+?)<\/strong>#is", "[b]$1[/b]", $txt );
  $txt = str_replace( "<br />", "\n", $txt );
 }


3. Переходим на страницу /admin.php?mod=dboption и сохраняем копию БД

4. Переходим в раздел Перестроение публикаций /admin.php?mod=rebuild
и запускаем "перестроение публикаций"

5. Проверяем успешность изменений.

6. Открыть файл engine/classes/parse.class.php и найти:

if( !$wysiwig ){
  $txt = preg_replace( "#<p>(.+?)<\/p>#is", "$1\n", $txt );
  $txt = preg_replace( "#<strong>(.+?)<\/strong>#is", "[b]$1[/b]", $txt );
  $txt = str_replace( "<br />", "\n", $txt );
 }


и удалить.


Задача выполнена.

Решение реализовал Виктор Ермаков (admin@rezer.net)