include php souboru v šabloně
- RadaR
- Člen | 46
Je možné, nějakým způsobem, provést include php skriptu v Latte 3.0? Mám projekt, který používá staré Latte (ještě pod Nette 2.1.x, ale samostatně), ale okolnosti nás dohnaly k tomu, přejít na aktuální PHP. Tudíž je nutno upgradeovat i Latte.
Bohužel, né všechny „prasárny“, které jsem používal, lze aplikovat i nadále. Zatím se postupně se vším zdárně prokousávám, ale narazil jsem na situaci, která mi dost komplikuje život.
V šablonách jsem používal něco jako:
{include sql.php, podminka1 => $sql_podminka1, typ_druh => 'xyz'}
což dříve normálně zafungovalo zamýšleným způsobem, tj. vložilo a provedlo php skript, včetně předaných proměnných. Vyžádal jsem si tak data, která jsem moh následně v šabloně iterovat.
Nyní však Latte php skript vloží pouze jako „textový obsah“, bez toho, aniž by se fakticky provedl.
{php include/require…} pochopitelně také nelze.
use case bylo v tomto případě takové, že jsem si tímto způsobem dokázal „per-šablony“ řídit, kdy se mají načítat jaká data, z jakých tabulek, aniž bych zbytečně volal SQL dotazy nad vícero tabulkami, se kterými u daného zákazníka pracovat nepotřebuji (jedná se o data pro záložky v detailu produktu na e-shopu; přičemž máme různé šablony pro různé zákazníky a každý měl títmo způsobem „customizováno“, které tabulky používá: tabulka „příslušenství“, tabulka „alternativy“, tabulka „skupiny“, atd…).
Jediný způsob, který mne nyní napadá je, že bych si musel někde nadefinovat pro toho kterého zákazníka seznam tabulek / záložek, pro něž potřebuji data načítat, samotné include potom řešit v php souboru a netahat jej do šablony. Což obnáší úplné překopání stávající logiky a dost práce navíc, takže se snažím najít nějaké jiné východisko. Už i bez toho je s přepisováním šablon a úprav php dost práce.
Editoval RadaR (4. 7. 2023 20:43)
- Marek Bartoš
- Nette Blogger | 1264
Ideálně skript přepsat do Latte, ale dá se to snadno i obejít přes PHP funkci :)
{php includeLatte(__DIR__ . '/sql.php', ['podminka1' => $sql_podminka1, 'typ_druh' => 'xyz'])}
function includeLatte(string $phpFile, array $vars): void
{
extract($vars);
include $phpFile;
}