Jak dostat Texy do šablony jednoduše

ludek
Člen | 83
+
0
-

Jak použít Texy v Nette:

1. instalace: composer require texy/texy

2. config: local.neon

services:
        texy:
            class: Texy\Texy

3. BasePresenter:

/** @var \Texy\Texy @inject */
    public $texy;

// konfigurace:
    protected function startup()
    {
        parent::startup();
		//nějaké konfigurační volby, pokud je třeba:
		$texy = new \Texy\Texy;
		$texy->typographyModule->locale = 'cs';
        $texy->headingModule->generateID = true;
        $texy->imageModule->root  = 'images/';
    }

4. Presenter (zaregistrovat filtr):

$this->template->addFilter('texy', [$this->texy, 'process']); // pro odstavce
$this->template->addFilter('texyLine', [$this->texy, 'processLine']); // pro řádky

5. Šablona:

{$poznamka|texy|noescape}
{$nazev|texyLine|noescape}

Je to tak nejlepší? Je nějaká jednodušší cesta?

Editoval ludek (11. 8. 2022 10:01)

ludek
Člen | 83
+
0
-

David Grudl napsal(a):
https://phpfashion.com/…exy-do-latte

Díky. To je ale řešení pro Latte 3 a to vyžaduje PHP 8, ke kterému se zatím na produkčním serveru nedostanu.

composer require latte/latte:3

Your requirements could not be resolved to an installable set of packages.
  Problem 1
    - Root composer.json requires latte/latte 3 -> satisfiable by latte/latte[v3.0.0].
    - latte/latte v3.0.0 requires php >=8.0 <8.2 -> your php version (7.4.1) does not satisfy that requirement.
  Problem 2
    - latte/latte v3.0.0 requires php >=8.0 <8.2 -> your php version (7.4.1) does not satisfy that requirement.
    - nette/nette v3.1.1 requires latte/latte ^2.9 || ^3.0 -> satisfiable by latte/latte[v3.0.0].
    - nette/nette is locked to version v3.1.1 and an update of this package was not requested.
Marek Bartoš
Nette Blogger | 1146
+
0
-

Pro Latte 2 existuje makro https://github.com/…/latte2.phpt#…

Editoval Marek Bartoš (22. 6. 2022 14:32)

ludek
Člen | 83
+
0
-

Díky. Dostanu chybu Unknown tag {texy}:

Presenter:

public function renderDefault(): void {

	$this->template->items = $this->repository->table('items');

	$texy = new \Texy\Texy;
	$latte = new \Latte\Engine;
	$latte->setLoader(new \Latte\Loaders\StringLoader);
	$macro = new \Texy\Bridges\Latte\TexyMacro($latte, $texy);
	$macro->install();
    }

Šablona:

{foreach $items as $i}
	{texy}
   		{$i->notes}
	{/texy}
{/foreach}

latte/latte v2.11.4
nette/application v3.1.7

Neumím to použít uvnitř Nette?
Tady se taky píše, že „má to dost omezení“, což nevím co znamená.

emololftw
Člen | 79
+
+1
-

@ludek

Zkus:

public function renderDefault(): void {
	$this->template->items = $this->repository->table('items');

	$texy = new \Texy\Texy;
	$macro = new \Texy\Bridges\Latte\TexyMacro($this->template->getLatte(), $texy);
	$macro->install();
}
ludek
Člen | 83
+
0
-

Díky, teď už makro existuje.
Nevěděl jsem, jak sáhnout na aktuální instanci Latte\Engine: $this->template->getLatte().

Ale stejně to nefunguje, podobně jako tady.

Tohle

{texy}
	{$i->notes}
{/texy}

Vypíše toto:

<?php echo LR\Filters::escapeHtmlText($i->notes); ?>

Editoval ludek (24. 6. 2022 9:13)

David Grudl
Nette Core | 8082
+
0
-

Pokud ti jde o to vypsat jednu proměnnou a máš Latte 2, šel bych původní cestou co jsi zmínil v první postu.

Značka {texy} funguje nejlépe až s Latte 3.

vonTrips
Člen | 5
+
0
-

Používám Latte 2 s Texy a mám toto v services.neon:

	nette.latteFactory:
		setup:
			- addFilter('texy', [\Texy(), process])

latte šablonách pak používám toto:

{$data->text|texy|noescape}

Přijde mi to jako jednodušší varianta, ale nejsem žádný extra vývojář, tohle jsem našel na internetu a beru klidně i zpětnou vazbu.