Přeformátování textu (v HTML) před vypsáním v šabloně

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

Pěkné dopoledne,
z databáze dostanu texty článků jako HTML (z wysiwyg editoru), které potřebuju trochu přeskládat – prázdné odstavce nahradit za </li><li> (protože design je nakódovaný takhle). Napsala jsem si helper, který to udělá, to je ok. Ale každý sudý <li> má mít jinou třídu – tzn. nejlepší mi připadá to HTML rozsekat do pole (pro jednotlivé prvky seznamu) a pak cyklem vypsat. Kde by bylo nejvhodnější ten převod na pole provést? Asi v presenteru, že?

saimons
Člen | 293
+
0
-

Otazka mi prijde trosku mimo tema Nette, ale mozna by ti pomohlo toto: http://simplehtmldom.sourceforge.net/

Tori
Člen | 32
+
0
-

Parser jsem na to právě tahat nechtěla, jednak mi to připadá jako overkill, a taky ten prázdný odstavec může obsahovat i nějaké bílé znaky, takže stejně bych musela každý odstavec testovat regulárem.

llsm
Člen | 121
+
0
-

Tori napsal(a):

Ale každý sudý <li> má mít jinou třídu

toho by melo jit pomerne snadno docilit javascriptem/ajaxem. A jeste jednoduseji (pokud jde o neco jednoducheho jako treba podbarveni) by to melo jit jen pomoci css bez pridavani tridy. Zkus se podivat na tuhle stranku

Tori napsal(a):

taky ten prázdný odstavec může obsahovat i nějaké bílé znaky, takže stejně bych musela každý odstavec testovat regulárem.

regularni vyraz je mozna zbytecne slozity, slo by toho docilit i pomoci fce trim, ale regularem, pokud ho spravne napises taky nic nezkazis…

Tori
Člen | 32
+
0
-

Trim nebude fungovat na pevné mezery (a nevím, jestli budou jako entita nebo ne).

Asi jsme se nepochopili, tak dám konkrétní příklad:
vstup z DB:

<p>text - prvni blok</p>
<p>text</p>
<p> </p>
<p>text - druhy blok</p>
<p>&nbsp;</p>
<p>text - treti blok</p>
<p>text</p>
<p>
 </p>
<p>text - ctvrty blok</p>

A požadovaný výstup:

<ul class='dvouSloupcovy'>
  <li><h2>Nadpis článku</h2></li>
  <li>

<!-- odtud až do příštího komentáře jsou přeformátovaná data z DB -->
	<p>text - prvni blok</p>
	<p>text</p>
  </li>
  <li class='pravy'>
	<p>text - druhy blok</p>
  </li>
  <li>
	<p>text - treti blok</p>
	<p>text</p>
  </li>
  <li class='pravy'>
	<p>text - ctvrty blok</p>

<!-- a uzavření odrážky + seznamu už je zase napevno v šabloně -->
  </li>
</ul>
Tori
Člen | 32
+
0
-

Teď jsem si uvědomila, že tam mám nesmyslné rozdělování článku do dvou sloupců, takže s logičtějším rozdělením už tohle nebudu muset vůbec řešit.
Každopádně díky za pomoc.

llsm
Člen | 121
+
0
-

Na odstraneni pevnych mezer muze poslouzit str_replace, ale podle me je wysiwyg editory spis nedelaji. Pokud spravne chapu, ze pozadovany vystup uz mas az do faze, kdy ti tam akorat chybi class u tech sudych <li>, tak u toho plati, co jsem psal vyse…

Jinak toto tema se netyka Nette a patri spis na jine forum.