Перейти к публикации

Ошибка в BB-кодах


Рекомендованные сообщения

Две ошибки. Первая - в версиях 9.3-9.5 точно (может, и раньше), вторая ошибка имеется в движке уже года два-три минимум и до сих пор не пофиксена.

1. Наблюдается и в админке при редактировании новости, и просто на сайте - при написании комментария. Имеется уже некоторый введённый текст. Помещаем курсор в самое начало первой строки текста и нажимаем любой бб-код (жирный шрифт, вставка спойлера, вставка цитаты и т.д...). Код вставляется не в указанное место, а в самый конец текста.

Если мы вставляем код где-нибудь в середине текста, или даже на второй строке (если первая, скажем, пустая) - всё нормально, код вставляется на месте курсора. Ошибка именно если курсор стоит в самом начале текста.

2. Ошибка при редактировании новости через админку.

Пример на основе краткого и полного описания новости.

В краткой и полной новости есть некоторый текст. Курсор находится в краткой новости.

Выделяем некоторый текст в полной новости. При этом курсор, разумеется переходит в поле полной новости (это в этом легко убедиться, начав что-нибудь печатать - печатаемый текст заменит собой выделенный)

Нажимаем какой-нибудь тег (например, жирный шрифт или цитата, спойлер, код...)

Код тега вставляется не слева и справа от выделенного текста (как должно быть), а в краткой (!?) новости на том месте, где когда-то, до выделения, располагался курсор.

А для того, чтобы выделенный текст был таки обрамлён тегом, - надо вначале кликнуть мышкой в поле полной новости, только после этого выделить текст, и тогда уже нажать на кнопочку тега.

Вроде понятно об`яснил и расписал всё. Если не удастся повторить - могу привести видео.

PS. Что-то на данном форуме буква "твёрдый знак" не вводится :blink:

Изменено пользователем LonerD
Ссылка на сообщение
Поделиться на других сайтах

1. Наблюдается и в админке при редактировании новости, и просто на сайте - при написании комментария. Имеется уже некоторый введённый текст. Помещаем курсор в самое начало первой строки текста и нажимаем любой бб-код (жирный шрифт, вставка спойлера, вставка цитаты и т.д...). Код вставляется не в указанное место, а в самый конец текста.

Если мы вставляем код где-нибудь в середине текста, или даже на второй строке (если первая, скажем, пустая) - всё нормально, код вставляется на месте курсора. Ошибка именно если курсор стоит в самом начале текста.

Да кстати, это старая песня

PS. Что-то на данном форуме буква "твёрдый знак" не вводится :blink:

Выкиньте оперу и поставьте нормальный браузер :)

Ссылка на сообщение
Поделиться на других сайтах

1. Наблюдается и в админке при редактировании новости, и просто на сайте - при написании комментария. Имеется уже некоторый введённый текст. Помещаем курсор в самое начало первой строки текста и нажимаем любой бб-код (жирный шрифт, вставка спойлера, вставка цитаты и т.д...). Код вставляется не в указанное место, а в самый конец текста. Если мы вставляем код где-нибудь в середине текста, или даже на второй строке (если первая, скажем, пустая) - всё нормально, код вставляется на месте курсора. Ошибка именно если курсор стоит в самом начале текста.

Эту проблему исправим в следующей версии, о ней никто не говорил, я ее просто не видел.

Выделяем некоторый текст в полной новости. При этом курсор, разумеется переходит в поле полной новости (это в этом легко убедиться, начав что-нибудь печатать - печатаемый текст заменит собой выделенный) Нажимаем какой-нибудь тег (например, жирный шрифт или цитата, спойлер, код...) Код тега вставляется не слева и справа от выделенного текста (как должно быть), а в краткой (!?) новости на том месте, где когда-то, до выделения, располагался курсор.

Это уже не ошибка скрипта, а особенность браузеров, скрипт узнает о том что поле сменилось по событию onclick, так вот если начать сразу выделение, без клика по полю, браузер не генерирует событие onclick, и соответветственно скрипт не знает что вы куда либо переместили курсор. Нужно сначала кликнуть по нужному полю в нужном месте, а потом уже выделять текст.

Ссылка на сообщение
Поделиться на других сайтах
  • 1 месяц спустя...

Раз уж есть тема про BB коды, продолжу тут:

Версия 9.5.

Если в комментариях не закрыть BB код, например S, B, U, I, то при публикации комментария, всё что идет за этим комментарием становится соответственно зачеркнутымжирнымподчеркнутымкурсивом до конца страницы. Т.к в комментарии BB код преобразуется в незакрытый тег.

Celsoft о проблеме знает, обещал поправить в следующей версии, но может кто знает как поправить это сейчас? Просто повадился один пользователь специально оставлять такие комментарии... Может не в парсере, может можно как-то каждый комментарий "изолировать", чтобы теги в нем не распространялись на всё остальное?

Добавлено позже:

Нашел временный костыль. Может кому пригодится

<table border="0" cellspacing="0" cellpadding="0"><tr><td>{comment}</td></tr></table>

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

Изменено пользователем Defin
Ссылка на сообщение
Поделиться на других сайтах

Пока можно сделать так:

замените


  $source = str_ireplace( "[b]", "<b>", str_ireplace( "[/b]", "</b>", $source ) );

  $source = str_ireplace( "[i]", "<i>", str_ireplace( "[/i]", "</i>", $source ) );

  $source = str_ireplace( "[u]", "<u>", str_ireplace( "[/u]", "</u>", $source ) );

  $source = str_ireplace( "[s]", "<s>", str_ireplace( "[/s]", "</s>", $source ) );

на это

  $count_start = substr_count ($source, "[b]");

  $count_end = substr_count ($source, "[/b]");

  if ($count_start AND $count_start == $count_end) {

   $source = str_ireplace( "[b]", "<b>", str_ireplace( "[/b]", "</b>", $source ) );

  }

  $count_start = substr_count ($source, "[i]");

  $count_end = substr_count ($source, "[/i]");

  if ($count_start AND $count_start == $count_end) {

  $source = str_ireplace( "[i]", "<i>", str_ireplace( "[/i]", "</i>", $source ) );

  }

  $count_start = substr_count ($source, "[u]");

  $count_end = substr_count ($source, "[/u]");

  if ($count_start AND $count_start == $count_end) {

  $source = str_ireplace( "[u]", "<u>", str_ireplace( "[/u]", "</u>", $source ) );

  }

  $count_start = substr_count ($source, "[s]");

  $count_end = substr_count ($source, "[/s]");

  if ($count_start AND $count_start == $count_end) {

  $source = str_ireplace( "[s]", "<s>", str_ireplace( "[/s]", "</s>", $source ) ); 

  }

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...