Zachycení a změna výstupu před vykreslením

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
onny
Člen | 67
+
0
-

Dobrý den, potřeboval bych zachytit výstup celého kódu, co mi Nette vygeneruje a udělat tam nějaké změny (čili pak ho pozměněný vrátit), jak by bylo nejlepší toto provést?

Děkuji

Elijen
Člen | 171
+
0
-

Nejlepší by to podle mě bylo neprovádět. Na co to potřebuješ? :)

Případně lze využít vlastní filtr:

// filtr, který nahradí v textu šablony slova 'apple' slovem 'pizza'
$template->registerFilter(function ($s) {
    return str_replace('apple', 'pizza', $s);
});

Editoval Elijen (30. 8. 2012 14:44)

Ot@s
Backer | 476
+
0
-

Doufám, že k tomu máš pádný důvod. :-) Interně (přes Nette) by to byla zhovadilost (postrádám důvod, když vše mohu ovlivnit přes šablony) a externě třeba pomocí knihovny SimplehtmlDOM

$html = file_get_contents('http://www.mujserver.cz/presenter/akce/nette');
$dom = str_get_html($html);
$dom->find('title', 0)->innertext = "Moje nove title";
echo $dom;

Editoval Ot@s (30. 8. 2012 14:43)

onny
Člen | 67
+
0
-

Děkuji za názor, zajímalo by mě to po technické stránce jako jedna z variant pro nějaké pozdější úpravy s css/js.

onny
Člen | 67
+
0
-

Děkuji, s touto možnosí jsem obeznámen, myslel jsem, že by to šlo „interně“ pomocí třeba shutdown a response, dříve něco takového bylo možné. Jinak jsem si vědom toho, co zkouším :))

Ot@s napsal(a):

Doufám, že k tomu máš pádný důvod. :-) Interně (přes Nette) by to byla zhovadilost (postrádám důvod, když vše mohu ovlivnit přes šablony) a externě třeba pomocí knihovny SimplehtmlDOM

$html = file_get_contents('http://www.mujserver.cz/presenter/akce/nette');
$dom = str_get_html($html);
$dom->find('title', 0)->innertext = "Moje nove title";
Ot@s
Backer | 476
+
0
-

Tak to určitě víš, že co se týče šablon, tak vše pro změnu obsahu v šabloně musíš znát do (včetně) beforeRender(). Pokud máš třeba samostatné pluginy (=objekty), které rozšiřují funkčnost aplikace, tak máš několik způsobů, jak zjistit potřebné výstupy (třeba) do hlavního layoutu (typicky zpětné ovlivnění obsahu <head>). Namátkově bych v těchto objektech využil anotace (třeba /** @importCSS css/article.css */) nebo bych pomocí interface „pluginům“ vnutil metodu, která bude vracet potřebné závislosti do jádra aplikace ještě před renderováním.

Editoval Ot@s (30. 8. 2012 14:54)