Truncate s ignorováním HTML tagů

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

Ahoj,

jde nějak v Latte zařídit, aby se truncate filtr použil pouze na text a HTML smetí ignoroval? Např. zápis:

{'<strong>Nazdar vesmíre!</strong>'|noescape|truncate:6}

vyhodí <stro..., já potřebuju: <strong>Nazdar</strong>.

ali
Člen | 342
+
0
-

Zkousels to udelat takto?

<strong>{'Nazdar vesmíre!'|truncate:6}</strong>
Pavel Kravčík
Člen | 1195
+
0
-

Barbarská myšlenka:

<strong>{'Nazdar vesmíre!'|truncate:6}</strong>
Daewoo
Člen | 36
+
0
-

S tím strongem to byl jen příklad. Text je v proměnné a obsahuje HTML obsah mnohem větší délky – jedná se o formátovaný popis od BFU z wysiwygu, vkládat latte přímo do textu si v tomto případě tak nemůžu dovolit i když by to šlo.

ali
Člen | 342
+
0
-

Tak ten truncate vyres pres CSS.

Daewoo
Člen | 36
+
0
-

Jedná se o víceřádkovou záležitost. Znám některé javascripty, co prdnou na konec textu tři tečky, ale chci se jim vyhnout. Nefungují spolehlivě.

Editoval Daewoo (23. 11. 2017 11:43)

CZechBoY
Člen | 3608
+
0
-

No jestli chceš zachovat html tak to jednoduše nepůjde…

Pavel Kravčík
Člen | 1195
+
0
-

Overflow: hidden třeba na tři řádky a pod tím tlačítko, co javascriptem velikost dle obsahu. Nebudeš nic ořezávat proto nemusíš kontrolovat DOM strukturu.

Daewoo
Člen | 36
+
0
-

Díky všem. Nakonec jsem to HTML vyhodil a truncatem ořízl na tolik, kolik bylo třeba. Nechci se v tom teď nějak víc šťourat.

Lepším řešením by bylo přidat si do Latte vlastní filtr, který by tu mou věc zajišťoval (inspirace např. v https://stackoverflow.com/…gnoring-tags – existuje spousta možností, každá má své mouchy a nutno řádně otestovat), ale chtěl jsem spíš znát, zda mi něco základního neuniklo a zda bych nevynalézal kolo. Pokud to jednoduše aktuálně nejde, nechme to být. Ještě jednou děkuju.

japlavaren
Člen | 404
+
0
-

ja pouzivam vlastny filter remove tags a potom to truncatujem:

<?php
$template->getLatte()->addFilter('removeTags', function ($str) {
			$str = Strings::replace($str, array(
				"~\r?\n~" => ' ',
				'~<br[^>]+>\s*~i' => PHP_EOL,
				'~<[^>]*>~' => ' ',
				'~ +~' => ' ',
			));
			return trim($str);
		});
?>

je tam kopu veci, co to neriesi viz. html entity a pod, ale zatial to stacilo takto a uz to pouzivam niekolko rokov

Editoval japlavaren (23. 11. 2017 16:25)