Jak dostat Texy do šablony jednoduše
- ludek
- Člen | 83
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
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 | 1280
Pro Latte 2 existuje makro https://github.com/…/latte2.phpt#…
Editoval Marek Bartoš (22. 6. 2022 14:32)
- ludek
- Člen | 83
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á.
- ludek
- Člen | 83
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 | 8239
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
Používám Latte 2 s Texy a mám toto v services.neon:
nette.latteFactory:
setup:
- addFilter('texy', [\Texy(), process])
v 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.