Абзацы в тексте вместо двух новых строк

Проблемы с установкой или работой phpBB 3.0.х. Решение проблем связанных с модами, стилями, доработками и так далее.
cefp
Сообщения: 333
Поблагодарили: 3 раза

Абзацы в тексте вместо двух новых строк

Сообщение cefp » Сб июн 13, 2015 10:46 pm

Заметил что в phpbb 3.1 средти стандартного функционала нет возможности использовать абзацы тегами

Для разделения абзацев приходится делать пустую строку. В коде это выглядит как, идущие подряд, два тега:

Визуально это выглядит не так хорошо как при использовании абзацев. Отступ получается слишком большой и его сложно менять.
В Phpbb 3.2 похоже точно также.
Возник вопрос: как сделать чтобы в коде вместо двух и более, идущих друг за другом, тегов выводился бы код:

Думаю с помощью bbкодов такое возможно. А можно ли сделать, чтобы это происходило автоматически в том числе при отображении ранее созданных сообщений?

Как это выглядит:
Строка 1.

Строка 2.
Обратите внимание на код между строками.
d o h o d - s - n u l y a .ru - идеи бизнеса.
Реклама
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Абзацы в тексте вместо двух новых строк

Сообщение cefp » Сб июл 04, 2015 4:11 pm

Добыл код для обработки таких текстов:

Код: Выделить всё

<?php
    /*
    * Для преобразования переноса строк в теги html,
    * При двойном переносе создаётся новый абзац.
    *
    * @var $string - строка для обработки
    *
    * @return string
    */
    function nl2p( $string ){
        # Производим замену
        $string = '<p>'. preg_replace("~\r\n(\s*)\r\n|\n\r(\s*)\n\r|\n(\s*)\n~", '</p><p>', $string) .'</p>';
       
        # Возвращаем обработанную строку
        return nl2br( $string );
    }
   
    # Пример использования
    $string = 'Проверка работы функции для обработки нового абзаца.
   
    Проверка работы функции для обработки нового абзаца.
    А это обычный перенос, перед ним будет обычный тег "br".
   
    Проверка работы функции для обработки нового абзаца.';
   
    echo nl2p( $string );

Сам код взял отсюда: nl2br() - переход на новую строку

Теперь следующий вопрос, куда вставить этот код?
d o h o d - s - n u l y a .ru - идеи бизнеса.
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Абзацы в тексте вместо двух новых строк

Сообщение cefp » Вс июл 05, 2015 12:27 am

Не нашел где используется функция nl2br, но есть вот такая:

Код: Выделить всё

function bbcode_nl2br($text)
{
   // custom BBCodes might contain carriage returns so they
   // are not converted into <br /> so now revert that
   $text = str_replace(array("\n", "\r"), array('<br />', "\n"), $text);
   return $text;
}
d o h o d - s - n u l y a .ru - идеи бизнеса.
Аватара пользователя
Slash
Администратор
Сообщения: 2029
Поблагодарили: 62 раза

Re: Абзацы в тексте вместо двух новых строк

Сообщение Slash » Вс июл 05, 2015 6:53 am

cefp, в каком это файле?

С кодом из поста: Re: Абзацы в тексте вместо двух новых строк можно сделать так:

Код: Выделить всё

function bbcode_nl2br($text)
{
   // custom BBCodes might contain carriage returns so they
   // are not converted into <br /> so now revert that
   $text = '<p>'. preg_replace("~\r\n(\s*)\r\n|\n\r(\s*)\n\r|\n(\s*)\n~", '</p><p>', $text) .'</p>';   
   $text = str_replace(array("\n", "\r"), array('<br />', "\n"), $text);
   return $text;
}

Или даже родную строчку удалить или закомментировать:

Код: Выделить всё

function bbcode_nl2br($text)
{
   // custom BBCodes might contain carriage returns so they
   // are not converted into <br /> so now revert that
   $text = '<p>'. preg_replace("~\r\n(\s*)\r\n|\n\r(\s*)\n\r|\n(\s*)\n~", '</p><p>', $text) .'</p>';   
   // $text = str_replace(array("\n", "\r"), array('<br />', "\n"), $text);
   return $text;
}

Код не проверял.
cefp
Сообщения: 333
Поблагодарили: 3 раза

Re: Абзацы в тексте вместо двух новых строк

Сообщение cefp » Вт июл 07, 2015 11:18 am

Файл functions_content в папке includes

Способ работает.

Я бы не стал убирать вторую строку, потому что многие вместо тега списков используют перевод на новую строку. С другой стороны люди иногда используют перевод на одну строку для отделения абзацев. Поэтому думаю, что лучше всего в обработчике вместо тега новой строки использовать тег нового абзаца, но с другим классом. Тогда визуально будет как при переводе строки, но можно будет сделать отступ первой строки абзаца. Правда получится что строки в списке это отдельный абзацы. Это единственный минус, который не знаю как решить с помощью кодов.

Возникло еще два вопроса:

1. Если человек сделает более двух переводов строки подряд, например 4 то получится пустой абзац. Как это предусмотреть?

2. Если текст разрывают другие теги, то абзац тоже разрывается. Например картинки его разрывают. При этом после картинки текста начинается без начала абзаца. Как предусмотреть такие случаи?
d o h o d - s - n u l y a .ru - идеи бизнеса.

Вернуться в «phpBB»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость