sablona komponenty – prebublanie bloku
- srigi
- Nette Blogger | 558
Hello, PLS poradte ako nejaky blok zo sablony komponenty prebublam do @layout.phtml.Alebo ako najjednoduchsie podedim sablonu komponenty od sablony Presenter:View, kde sa komponenta vkladala?
@layout.phtml
...
<div id="footer">
<p>Copyright ©2010 Igor Hlina</p>
</div><!-- #footer -->
</div><!-- #wrapper -->
{block #javascripts}{/block}
</body>
</html>
components/templates/graph.phtml
...
{block #javascripts}
<script type="text/javascript" src="{$basePath}/js/EFlot/excanvas.min.js"></script>
<script type="text/javascript" src="{$basePath}/js/EFlot/jquery.flot.js"></script>
{/block}
Editoval srigi (19. 6. 2010 23:10)
- Tharos
- Člen | 1030
Jinak nejjednoduššeji lze tohle momentálně vyřešit asi tak, že presenter obsahuje například pole $scripts, které může předávat šabloně například v beforeRender(), a komponenta do tohoto pole může přidávat své skripty přes attached().
Já se tomuto systému snažím většinou ještě něco málo přidat na kráse tak, že presenter implementuje cosi jako například IScriptsHolder a v attached() se testuje, zda je komponenta připojována právě k implementaci tohoto rozhraní.
- Dr.Diesel
- Člen | 53
Ahoj vsem,
zkousel jsem se danou veci zabyvat, protoze jsme narazili na identicky problem s javascripty. Alespon jsem se vic dozvedel o tom, jak v realu funguji sablony, ono se to hodi. Imho jsem pri pokusech s implementaci narazil na to samy, na co narazi zavinacova magie:
- Klicove: komponenta se zpracovava az v ramci daneho bloku sablony (nelze jiz prepsat bloky, ktere uz sou vypsane, typicky javascripty v hlavicce)
- podarilo se mi upravit LatteMacros, aby se zpracoval render komponenty pred zpracovanim sablony (se zachovanim stavajici podoby zdrojove sablony). Nasledne i prenos pretizeneho bloku z komponenty do sablony byl mozny. Ale: {control} fungoval jen do chvile, nez byl obaleny do {if}, {for}, {foreach}, {while} apod., pak se samozrejme pristup se „zpracovanim komponenty napred“ hrouti (podobne jako se zavinaci).
- Aktualni stav: Bylo by mozne v LatteMacros umoznit pretizeni bloku z komponenty, pokud {control} nebude uvnitr zadneho ridiciho cyklu, tj. „komponenta v sablone, ktera umi pretizit jeji blok (imho pouzitelne predevsim pro javascripty)“. To se mi podarilo a pokud myslite, ze je to uzitecne, muzu se podelit o stavajici upravu, ktera chce jeste doladit co do zavinacove magie/snippetu.
Editoval Dr.Diesel (15. 8. 2010 1:24)
- Lopo
- Člen | 277
neviem ci to je ono (ci som spravne pochopil), ale neni riesenim {include #parent} ?
@{block #javascripts}
{include #parent}
<script type="text/javascript" src="{$basePath}/js/EFlot/excanvas.min.js"></script>
<script type="text/javascript" src="{$basePath}/js/EFlot/jquery.flot.js"></script>
{/block}
tento sposob pouzivam na rozsirenie definicie stylov pri renderovani Excel XML
v layoute @xml.phtml mam nadefinovane zakladne styly
<Styles>
{block #styles}
<Style ss:ID="Top">
<Font ss:Bold="1"/>
<Alignment ss:Horizontal="Center" ss:WrapText="0"/>
<Interior ss:Color="#B8CCE4" ss:Pattern="Solid"/>
</Style>
<Style ss:ID="Integer">
<Alignment ss:WrapText="0"/>
<NumberFormat ss:Format="0"/>
</Style>
{/block}
</Styles>
@{include #content}
a potom v sablone konkretneho renderu v pripade potreby rozsirujem o dalsie styly
@{block #styles}
{include #parent}
<Style ss:ID="Int_sum">
<Alignment ss:WrapText="0"/>
<NumberFormat ss:Format="0"/>
<Interior ss:Color="#92D050" ss:Pattern="Solid"/>
</Style>
{/block}
@{block #content}