Generování komponenty s Texy! syntaxí do bloku proháněném Texy!

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

Ahoj. Mám v DB uložený obsah stránky, který obsahuje vložení externích dat (https://forum.texy.info/…rice-produkt). Šablona komponenty je v Texy! syntaxi, aby když se vygeneruje a vrátí do ostatního obsahu, prošla formátovacím procesem a vykresila mi hezkou tabulku. Ačkoli ostatní text z DB se vykreslí správně zformátovaný, vrácená komponenta je v Texy! syntaxi bez přeformátování. Důvod, proč mám šablonu v Texy! syntaxi je ten, že v generované komponentě potřebuji ošetřit výstupní data také pomocí Texy! a volání Texy! vrámci jiného volání Texy! nelze. Přikládám ukázky kódů. Uměl byste problém někdo vyřešit tak, aby se generovaná komponenta také zformátovala? Díky moc

<?php
	function scriptHandler($invocation, $cmd, $args, $raw)
	{
		switch ($cmd) {
			case 'kontakty':
				ob_start();
				$this['kontakty']->render();
				return ob_get_clean();
			default: // neumime zpracovat, zavolame dalsi handler v rade
				return $invocation->proceed();
		}
	}
?>

Text v DB:

**Kontakty na nás**

{{kontakty}}

Výsledná stránka:

Kontakty na nás

| Jméno | Příjmení |
| … | … |

Honza Marek
Člen | 1664
+
0
-

Pokud to opravdu nutně potřebuješ mít v texy, tak by mohlo pomoct zformátování obsahu novým objektem Texy!!!.

ob_start();
$this['kontakty']->render();
$code = ob_get_clean();
$texy = new Texy;
return $texy->process($code);
Milanov
Člen | 51
+
0
-

To vím. Bohužel takto mi padne nastavení původního objektu. Jde mi hlavně o to, že určité informace v tabulce bych chtěl zformátovat pomocí Texy!. Šablona komponenty může být klidně v HTML, ale potom dochází k volání Texy! uvnitř Texy!. Je to takový začarovaný kruh. Proto mi přišlo vhodné použít pro šablonu Texy! syntaxi a přeformátovat to pouze jednou. Bohužel text z vygenerované komponenty se neformátuje a to je můj problém.

Honza Marek
Člen | 1664
+
0
-

Milanov napsal(a):

Bohužel takto mi padne nastavení původního objektu.

Vyrob si poděděnou třídu, ve které si Texy nastavíš.

class MyTexy extends Texy {

	public function __construct() {
		parent::__construct();

		$this->headingModule->blabla = ...;
		...
	}

}
Milanov
Člen | 51
+
0
-

Jo, to je řešení. Díky

romansklenar
Člen | 655
+
0
-

Řeším teďkom podobný problém, jen s tím rozdílem, že z volání $this['kontakty']->render() nevracím Texy kód ale vykresluji nějakou komponentu. Dejme tomu, že výsledkem její funkce render je takovýto HTML kód:

<h1 class="center">Hello World!</h2>

Problém je ten, že Texy to bere jako data určená ke zpracování a všechno prožene filtrem, takže z toho vznikne toto:

<p>&lt;h1 class=„center“&gt;Hello World!&lt;/h2&gt;</p>

což se samozřejmě v prohlížeči nevykreslí správně :) Už se pár hodin hrabu v Texy metoda pokus omyl, ale nic. Nenapadá někoho jak tomuto předejít?

EDIT: řešení je zde: https://forum.texy.info/…rice-produkt?…