TCSE

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

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


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

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



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

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


так и TinyMCE (WYSIWYG) и вот тут начинаются чудеса.
Исправление html кода для bb редактора


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

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

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

Многие на этот этапе пугаются и включают (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 на самую свежую наши правки опять поломаются.

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

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



После которого код новостей будет восстановлен.
Исправление html кода для bb редактора


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



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)