it-swarm-eu.dev

Měl by se převádějící řádek převádět na elementy p a div?

Mám prosté textové pole v typu obsahu. Když narazím na návrat mezi odstavci, jsou zde konce řádků a při kontrole kódu se zobrazují uvnitř firebugu. Tělo na stránce zobrazení však nečiní žádné konce řádků. Podíval jsem se na filtr pro prostý text a je zkontrolován filtr na konec řádků. Když přejdu na filtrovaný html v podobě nastavení tělesného widgetu, funguje to dobře.

Musíte použít filtrované nastavení HTML, aby se konce řádků převedly?

6
Adam S

Pokud vyberete možnost „Obyčejný text“, nenastavujete pole tak, aby používalo vstupní formát „Obyčejný text“; nastavujete pole pro změnu zadaného textu na prostý text.

text_field_formatter_view () , funkce, která vydává obsah textového pole, provede následující kód, když je pole nastaveno tak, aby se zobrazovalo jako prostý text:

case 'text_plain':
  foreach ($items as $delta => $item) {
    $element[$delta] = array('#markup' => strip_tags($item['value']));
  }
  break;

Jak vidíte, text je předán do strip_tags(), který nekonvertuje znaky nového řádku ve značkách <p> Nebo <div>.

2
kiamlaluno

Odpověď na vaši otázku zní ne, neměla by.

Ale vždycky to chci, a to i moji uživatelé. Pro textareasy, které nevyžadují "fantazijní" formátování, máme stále vždy požadované konce řádků, které se mají přenést na displej.

Používám to v mém template.php k jejich přidání do textových polí plain_text:

/**
 * 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']);
  }
}
9