Vytvoření vlatního tagu do Latte šablony
- grovik
- Člen | 92
Ahoj,
jsem z toho trošku v úzkých. Snažím se vytvořit několik tagů pro
vkládání dat z DB nebo přímo z MODBAS zařízení. Mám problém tag
vytvořit. Možná dělám něco fakt blbě… už se v tom vrtám asi týden.
Jediné co mám je chyba
`Latte\CompileException
Unexpected tag {ndata} (in ‚…/ControlRoom /default.latte‘ on line 92 at
column 25)`
Mám vytvořený extension
<?php
namespace App\Components\Latte;
use Latte\Extension;
/** @noinspection PhpUnused */
use App\Components\Latte\NDataNode;
/** @noinspection PhpUnused */
use App\Components\Latte\NButtonNode;
/** @noinspection PhpUnused */
use App\Components\Latte\NGrafNode;
use App\Services\ChannelService;
final class ChannelsExtension extends Extension
{
private const _REFS = [NDataNode::class, NGrafNode::class, NButtonNode::class];
public function __construct(private readonly ChannelService $channelService) {
\Tracy\Debugger::barDump('ChannelsExtension constructed', 'Latte');
}
/** @return array<string,callable> */
public function getTags(): array
{
bdump('ChannelsExtension loaded', 'Latte'); // uvidíš v Tracy
return [
'ndata' => [NDataNode::class, 'create'],
'ngraf' => [NGrafNode::class, 'create'],
'nbutton' => [NButtonNode::class, 'create'],
];
}
/** @return array<string,mixed> providers accessible as $this->global->channelsService */
public function getProviders(): array
{
return [
'channelsService' => $this->channelService,
];
}
}
Pro začátek jsem do Presenteru přidal registraci
public function beforeRender():void
{
parent::beforeRender();
$latte = new \Latte\Engine();
$latte->addExtension(new ChannelsExtension($this->channelService));
}
No a v šabloně:
<div class="card">
<div class="card-header">Graf hladiny</div>
<div class="card-body">
<div class="placeholder" style="height:100px;background:#eee;">Graf</div>
{ndata 1}
</div>
</div>
Editoval grovik (Včera 15:03)
- grovik
- Člen | 92
Hurá tak jsem na to přišel :D
Asi by to chtělo zanést do návodu. Kudy na to v Presenteru.
protected function createTemplate(?string $class = null): \Nette\Application\UI\Template
{
$template = parent::createTemplate($class);
// získat aktuální Latte Engine
$latte = $template->getLatte();
// přidat Channels
$latte->addExtension(new \App\Components\Latte\ChannelsExtension($this->channelService));
// kontrola jestli to fachčí
bdump($latte->getExtensions(), 'Active Latte extensions after addExtension()');
return $template;
}