Как получить разрывы строк при использовании формата обычного текста?

11

Я чувствую, что это должно быть очень просто, но это сводит меня с ума.

Я выбрал «простой текст» для всех моих элементов Body. Я не хочу, чтобы кто-либо вообще мог вводить html при заполнении форм.

Тем не менее, я хочу сохранить разрывы строк. На странице конфигурации для простого там действительно есть флажок, чтобы превратить разрывы строк в br и p, но независимо от того, что я проверяю или как я переставляю вес фильтров, я не могу заставить его сохранить разрывы.

Какова правильная конфигурация, чтобы заставить это работать, чтобы я мог сохранить результаты в текстах?

blue928
источник
1
Это странно. У меня такая же настройка, и она работает для меня. Это чистая установка или обновление? Используете ли вы пользовательский модуль, возможно, перезаписываете или что-то еще?
Эмиль Орол
Это было похоже на ошибку или что-то было немного неуместно. Я понял, что происходит, что я могу вернуть теги br и p для разрывов строк, но затем они отфильтровываются для сохранения истинного «простого текста». Что вы проверили и каков порядок ваших фильтров?
blue928
У меня все еще есть проблема с простым текстом. Я также добавил теги <p> и <br>, но не повезло. Я что-то упустил?
Сократис

Ответы:

8

Похоже, ошибка в ядре Drupal http://drupal.org/node/1019042

giorgio79
источник
1
Да, это ошибка. Смотрите обход в моем ответе ниже.
Druvision
Это было также помечено как «работает как задумано» в другом выпуске, который был открыт позже drupal.org/project/drupal/issues/1102900
GiorgosK
11

Это похоже на ошибку Drupal 7.x. Изменение порядка фильтров не работает в моем случае.

Моим краткосрочным решением было добавить это в template.php моей темы ( ссылка ):

<?php
/**
 * Implements template_preprocess_field().
 */
function THEMENAME_preprocess_field(&$vars, $hook) {
  // Add line breaks to plain text textareas.
  if (
    // Make sure this is a text_long field type.
    $vars['element']['#field_type'] == 'text_long'
    // Check that the field's format is set to null, which equates to plain_text.
    && $vars['element']['#items'][0]['format'] == null
  ) {
    $vars['items'][0]['#markup'] = nl2br($vars['items'][0]['#markup']);
  }
}
?>

Для полей в представлениях необходимо установить эту опцию отдельно в разделе «Перезаписать результаты» настроек поля.

Druvision
источник
3

На самом деле, он должен работать с этой настройкой порядка фильтров в "admin / config / content / format / plain_text"

  1. Отображать любой HTML как обычный текст
  2. Конвертировать URL в ссылки
  3. Преобразование разрывов строк в HTML (т. Е. <br> и <p>)

Попробуйте фильтры ниже, убрав «Показать любой HTML как обычный текст»:

  1. Ограничить допустимые теги HTML (установите только <a> и <br> для списка разрешенных тегов HTML)
  2. Конвертировать URL в ссылки
  3. Преобразование разрывов строк в HTML (т. Е. <br> и <p>)
Ситху
источник
2
это не будет работать, если формат ввода не является фильтрованным текстом.
artfulrobot
3

Решение простое. Просто отобразите текстовое содержимое с помощью следующей CSS.

white-space: pre-line;
Кевин Сиджи
источник
2
На самом деле, white-space: pre-line;как уже упоминалось на drupal.org/node/1095838#comment-6679314 лучше.
Йерун
Такое элегантное решение.
Сефиит
Это работает, но только если вы хотите настроить таргетинг на каждое из ваших полей вручную или если все ваши поля с длинным текстом нуждаются в этом. Если вы смешали поля «простой текст» с полями других типов, и если вы используете это с mpdf для создания файла PDF, то работает только решение Druvision.
Ричард
1

Я использовал модуль Advanced Text Formatter, чтобы быстро решить эту проблему без кода.

  1. Установите и активируйте модуль.
  2. Нажмите «Управление отображением» вашего типа контента.
  3. Измените «Простой текст» формата вашего поля на «Расширенный текст»
  4. Нажмите на шестеренку справа (или ссылку на настройки формата)

    1. Установите длину обрезки до 0
    2. Установите фильтр на «Ограничить допустимые теги HTML»
    3. Удалить все элементы из «Разрешенных тегов HTML»
    4. Отметьте «Преобразование разрывов строк в HTML»
    5. Нажмите «Обновить» и сохраните отображение поля.

Настройки формата модуля Advanced Text Formatter, чтобы разрешить только разрывы строк

StackAttack
источник
0

Я не думаю, что это входная фильтрация: это, вероятно, настройка отображения для поля. Если установлено «Обычный текст», измените его на «По умолчанию». В противном случае теги, созданные для входных разрывов строк, удаляются перед отображением поля.

Для ясности это находится на панели «Управление отображением» для рассматриваемого типа контента. В разделе Администрирование »Структура» Тип содержимого »MyContentType» Управление отображением. Под столбцом Формат для поля.

Альфред Армстронг
источник
0

Я не думаю, что это ошибка, но результат путаницы (не помогает способ настройки Drupal) между полем с форматом ввода «отфильтрованный текст», установленным на «простой текст», и полем «простой текст». Если при создании поля вы выбираете «отфильтрованный текст», пользователь получит опцию выбора из «простого текста» и любых других доступных форматов ввода, а при использовании опции «простой текст» при создании контента будет отображаться строка ломает и ссылки из коробки. Однако, если при создании поля вы выбираете «обычный текст», никакие теги не будут доступны / отображаться вообще, независимо от того, как вы настроите формат ввода «простого текста». Поэтому, прежде чем паниковать, что «простой текст» не работает, сначала проверьте в настройках типа контента, что поле имеет «отфильтрованный текст» выбран. Это парадоксально и раздражает, но, Drupal ...;)

Thoughtcat
источник
0

«Формат простого текста» как метод «Обработка текста» НЕ поддерживает HTML-теги, поэтому переносы строк не работают нормально.

Создайте «текстовый формат» для «Отфильтрованный текст (пользователь выбирает текстовый формат)» и установите для «Текстовый формат» значение «Простой текст».

user9616
источник
Для меня это решило изменение поля в типе контента на «отфильтрованный текст - выбор пользователя», но затем я убедился, что у пользователя есть доступ только к текстовому редактору. Как-то это сработало. Если бы у пользователя был доступ к другим текстовым редакторам, это было бы не очень хорошо.
Кристия
-2

Этот великолепный модуль может помочь вам https://drupal.org/project/wysiwyg_linebreaks

Wysiwyg переносы позволяют пользователям WYSIWYG редакторов сохранять и открывать разметки с их сайта с переносами вместо <p>и <br /> тегами.

user24291
источник