Použití konfigurace v Latte
- Melebius
- Člen | 16
Zdravím, potřeboval bych poradit, jak dostat do Latte konfigurační parametr, konkrétně kořenovou cestu k aplikaci na webserveru. Parametr je z hlediska aplikace globální, ale liší se mezi instancemi (produkce/dev).
Stávající kód s parametrem v rámci Latte:
{block head}
{var $RootPath = '/klient/projekt/htdocs'}{* varianta dev *}
<link rel="stylesheet" href="{$RootPath}/css/vendor/tablesorter.css">
<script type="text/javascript" src="{$RootPath}/js/vendor/jquery.js"></script>
<script type="text/javascript" src="{$RootPath}/js/vendor/jquery.tablesorter.js"></script>
Ideální by mi přišlo, kdyby se dala hodnota nastavit v
config.local.neon
a v Latte vyčíst, pokud možno bez toho, abych
ji musel ručně přenášet v každém presenteru, kterého se to týká. Na
rozdíl od @ZdenekKaras (https://forum.nette.org/…otu-promenne)
jsem bohužel nenašel návod, jak načíst hodnotu z Neonu do Latte –
DuckDuckGo i Google mi cpou samé PHP. 😄
- m.brecher
- Generous Backer | 873
Ahoj,
zrovna včera jsem řešil podobný problém – hledal jsem nejjednodušší způsob, jak předat absolutní souborovou cestu do adresáře aplikace ve kterém je např. Bootstrap.php – obvykle to je /app.
Na rozdíl od proměnné $basePath, kterou nette automaticky injektuje do každé latte šablony, připraví nette tuto souborovou cestu do parametru %appDir%, který je k dispozici v konfiguračních souborech.
Přímé předání do nějaké služby/presenteru v konfiguračním souboru zajišťuje sekce decorator. Zkusil jsem nejprve předat %appDir% do šablony přímo:
config/common.neon:
decorator:
Nette\Bridges\ApplicationLatte\DefaultTemplate:
setup:
- add('appDir', %appDir%)
Mělo by to fungovat, ale nefunguje (neznám vnitřní detaily jak šablona interně funguje).
Tak jsem zkusil jít na to přes presenter. Parametr %appDir% jsem v sekci decorator předal do BasePresenteru.
config/common.neon:
decorator:
App\Presenters\BasePresenter:
setup:
- $appDir = %appDir%
V BasePresenteru jsem si definoval public property appDir a injektoval ji do šablony klasickým způsobem:
abstract class BasePresenter extends Presenter
{
public string $appDir;
public function beforeRender()
{
parent::beforeRender();
$this->template->appDir = $this->appDir;
.......
}
}
Tohle funguje. Proměnnou $appDir potom v šablonách používám na inkludování podšablon, těch které jsou v jiném modulu a vymýšlet cestu relativně by bylo nepohodlné.