addTextArea odřádkování v html

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
motorcb
Člen | 552
+
0
-

Zdravím.
Používám TextArea ve formuláři a chtěl bych zachovat odřádkování v textech při výpisu.

protected function clanekForm()
  {
      $form = new Form();

      $form->addTextArea('text', 'Text čláku:')
          ->addRule(Form::FILLED, 'Je nutné zadat text článku');

      return $form;
  }

  protected function createComponentClanekEditForm()
  {
      $form = $this->clanekForm();

      $oClanekDetail = $this->context->database->table('clanek')->where( array( "id" => $this->getUser()->getId() ) )->fetch();

      $form->setDefaults( array('text' => $oClanekDetail->text) );

      $form->addSubmit('edit', 'Upravit článek');
      $form->onSuccess[] = callback($this, 'clanekEditFormSubmitted');

      return $form;
  }

  public function clanekEditFormSubmitted($form)
  {
      $aValues = $form->getValues(TRUE); // same as: (array) $form->values;

      $this->context->createClanek()->where(array('id' => $this->getUser()->getId()))->update($aValues);
  }

Tento kód uloží ke každému uživateli text co si napíše. Já bych potřeboval aby při výpisu {$clanek->text} bylo odřádkování stejné jako v TextArea. Nevěděl by někdo jak na to?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Tak se tomu v HTML má, že reálné odřádkování !== odřádkování v prohlížeči. Buď to prožeň Texy, nebo to ostyluj, nebo vypiš v <pre>.

motorcb
Člen | 552
+
0
-

vojtech.dobes:
Jak mám ostylovat odřádkování?
Co myslíš tím „prožeň Texy“ ?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Na to, aby nový řádek se skutečně jako nový řádek zobrazil v prohlížeči je pokud se nemýlím nějaká CSS vlastnost.

Texy ti pomůže taky, protože z plain textu vytvoří HTML. Pokud nevíš, co je Texy, vygoogli.

Ale úplně nejsnazší je to prostě vypsat do <pre>.

elden46
Člen | 37
+
0
-

Nebylo by nejjednodussi pouzit helper nl2br?

V sablone:

{$clanek->text|nl2br}
motorcb
Člen | 552
+
0
-

zkoušel jsem to přes

{$clanek->text|nl2br}

ovšem to mi vypáše <br /> přímo do výstupu prohlížeče, ale neodřádkuje :(

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Tak to bylo dobrý :). elden46 má samozřejmě pravdu, Nette je na to vybaveno tímto helperem.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Zkus {!$clanek->text|nl2br}

motorcb
Člen | 552
+
0
-

Perfekt. Funguje.
Máte mne pivo :)

Nebylo by nějaké vysvětlení k tomu vykřičníku?
Díky

Editoval motorcb (31. 5. 2012 11:18)

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

já používám ještě variantu {!$clanek->text|escape|nl2br} – odřádkování se převede, ale ostatní HTML tagy budou escapovány.

Bernard

voda
Člen | 561
+
0
-

Vypisovat neescapovaný vstup od uživatele bych nedoporučoval. Použij:

{!$clanek->text|escape|nl2br}
Jendaaa
Člen | 21
+
0
-

motorcb napsal(a):

Perfekt. Funguje.
Máte mne pivo :)

Nebylo by nějaké vysvětlení k tomu vykřičníku?
Díky

Vykřičník vypne escapování výstupu…breaky které by se vytvořily pomocí nl2br by se pak vypsaly textově.

Ascaria
Člen | 187
+
0
-

motorcb napsal(a):

Perfekt. Funguje.
Máte mne pivo :)

Nebylo by nějaké vysvětlení k tomu vykřičníku?
Díky

{$a} = echo htmlspecialchars($a, ENT_QUOTES);
{!$a} = echo $a;
{$a|nl2br} = echo htmlspecialchars(nl2br($a), ENT_QUOTES);
{!$a|escape|nl2br} = echo nl2br(htmlspecialchars($a, ENT_QUOTES));

Editoval Ascaria (31. 5. 2012 12:13)