BasePresenter proměnná do více @layout

mimacala
Člen | 113
+
0
-

Ahojte,
mám webovu aplikaci, pro hlavní stránku mám jiný layout než pro vnitří aplikaci uživatele.
Pokud bych chtěl do vnitří aplikace přidat jméno uživatele → tedy do @Applayout, předám si ji přes basepresenter, ovše v layoutu mi to vždycky i tak hodí chybu, že nezná proměnnou , kterou definuji.
Moc děkuji za rady

 <div class="d-none d-sm-block topbar-divider"></div>
                        <li class="nav-item dropdown no-arrow">
                            <div class="nav-item dropdown no-arrow"><a class="dropdown-toggle nav-link"
                                                                       aria-expanded="false" data-bs-toggle="dropdown"
                                                                       href="#"><span
                                      class="d-none d-lg-inline me-2 text-gray-600 small">{$jmeno}   ZDE JE PROMĚNNÁ</span><img
                                            class="border rounded-circle img-profile"
                                            src="{$basePath}/assets/img/avatars/avatar1.jpeg"></a>
                                <div class="dropdown-menu shadow dropdown-menu-end animated--grow-in"><a
                                            class="dropdown-item" href="#"><i
                                                class="fas fa-user fa-sm fa-fw me-2 text-gray-400"></i>&nbsp;Profile</a><a
                                            class="dropdown-item" href="#"><i
                                                class="fas fa-cogs fa-sm fa-fw me-2 text-gray-400"></i>&nbsp;Settings</a><a
                                            class="dropdown-item" href="#"><i
                                                class="fas fa-list fa-sm fa-fw me-2 text-gray-400"></i>&nbsp;Activity
                                        log</a>
                                    <div class="dropdown-divider"></div>
                                    <a class="dropdown-item" href="#"><i
                                                class="fas fa-sign-out-alt fa-sm fa-fw me-2 text-gray-400"></i>&nbsp;Logout</a>
                                </div>
                            </div>
                        </li>

Tady je basepresenter

<?php

namespace App\Presenters;

use Nette;
use Nette\Security\User;

abstract class BasePresenter extends Nette\Application\UI\Presenter
{
    public function __construct()
    {
        parent::__construct();
        $this->setLayout('AppLayout');

    }

    public function beforeRender(): void
    {
        parent::beforeRender();

        $this->template->jmeno = $this->user->getIdentity()->jmeno;
    }


}
final class UpravitPresenter extends BasePresenter // tady dědím basepresenter
{
}
Kamil Valenta
Člen | 758
+
+2
-
  1. Není zřejmé, jakou šablonu jsi sem dal, to je @applayout? A ta HP má @layout? A ta vypadá jak?
  2. $user je normálně v šabloně dostupný, takže celý beforeRender můžeš zrušit a v šabloně mít jen:
{if $user->isLoggedIn()}
	{$user->getIdentity()->jmeno}
{/if}
mimacala
Člen | 113
+
0
-

Ale jistě… proč bych to řešil složitě, když to lze takto ..
Moc děkuji mám ponaučení pro příště :D