Vytvoření vlatního tagu do Latte šablony

grovik
Člen | 92
+
0
-

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
+
0
-

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;
    }