Исправление html кода для bb редактора
Если вдруг ваш сайт на DLE случайно поломал отображение верстки в админке, то данная заметка для вас.
Как это обычно бывает?
В настройках сайта используется по-умолчанию BBcode редактор для написания новостей и статических страниц.
Установлена галочка "автоматический перенос строк" и все прекрасно.
Но в какой то момент из-за шила в пятой точке, либо по любой другой причине админ сайта включает на сайте визуальный редактор кода.
Для свежих версий DLE это может быть как LiveEditor (WYSIWYG),
так и TinyMCE (WYSIWYG) и вот тут начинаются чудеса.
Как только вы включаете визуальный редактор (WYSIWYG) то отключается "автоматический перенос строк" для всех новых публикаций и всех тех, что вы будите редактировать.
Появляется избыточный (даже мусорный) html код. Эдакий аналог редактор Word в худщем своем виде.
Через некоторое время вы понимаете - Стандартный (BBcode) редактор значительно лучше и устанавливаете в админке сайта для работы с новостями.
И вот тут сюрприз: ваша публикаци в режиме редактирования превращается в чистый html без переноса строк.
Людям далеким от html эта каша ломает мозг, как жить дальше?
Многие на этот этапе пугаются и включают (WYSIWYG) редактор обратно, продолжают страдать и жевать кактус.
Но есть решение данной проблемы!
Существует мнение что у dle постоянная проблема с этим переключением редакторов, в принципе основные проблемы, это теги:
<br><p><strong>–
Необходимо поправить парсер, он сам будет выдавать более менее нормальный код.
Для этого нужно
Открыть файл 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)
2 Комментарии