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

Скрипты и советы | 29 февраля 2016 11 908

парсер, BBcode, хаки, советы, мы рекомендуем

Исправление 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)
Виталий Чуяков

Виталий Чуяков

Технологический прагматик

Веб-разработчик с 20-летним стажем, основатель веб-студии TCSE. Специализация: DLE «под ключ», Webasyst, Parts-Soft.ru, технический аудит.

🧠 20 лет 🚀 120+ проектов 📄 45+ статей
[Из песочницы] Sublime Text 3 жив. (Настройка и работа)

Sublime Text 3 — кроссплатформенный текстовый редактор. Краткий гайд для начинающих работать в sublime и в сфере...

Подробнее
Мысли о клиентской программе для постинга новостей на ДЛЕ-сайты

Все чаще мне в голову приходит мысль о необходимости разработки отдельной клиентской программы для компьютера, через...

Подробнее
Notepad++ 5.1.4

Notepad++ - это мощный редактор текстовых файлов (замена стандартного Блокнота) с поддержкой синтаксиса большого...

Подробнее
Беспощадный SEO: CNET удаляет тысячи публикаций, чтобы повысить свой рейтинг в поиске Google

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

Подробнее
Задание для саморазвития: HTML-форма со списком случайных строк и отбором по ним

Предлагаю вниманию хабровчан и гостей Хабра задание для саморазвития во frontend-стороне разработки. Задание...

Подробнее
Почему вы разрабатываете лендинги на фреймворке Webasyst?

Мы выбираем фреймворк Webasyst для разработки лендингов, потому что это современное и гибкое решение, которое позволяет...

Подробнее

💬 Комментарии

В связи с новыми требованиями законодательства РФ (ФЗ-152, ФЗ «О рекламе») и ужесточением контроля со стороны РКН, мы отключили систему комментариев на сайте.

🔒 Важно Теперь мы не собираем и не храним ваши персональные данные — даже если очень захотим.

💡 Хотите обсудить материал?

Присоединяйтесь к нашему Telegram-каналу:

https://t.me/tcsecms/

Нажмите кнопку ниже — и вы сразу попадёте в чат с комментариями

  1. Спасибо. Но есть еще теги как ul и li, их бы тоже поменять!
    Владимир Владимир 28 ноября 2016 17:36
    1. а не пробывали сделать так:

      1. сохранить текущую копию БД
      2. в админке "поиск и замена"
      найти
      <ul>

      заменить на
       [list] 


      3.найти
      </ul>

      заменить на
       [/list] 


      4. найти
      <li>

      заменить на
       [*] 


      5. найти
      </li>

      заменить на
      <br> 



      не факт, что сработает.
      но вдруг, поможет.
      TCSE TCSE 28 ноября 2016 18:27