Dva bloky v komponentě a jejich vykreslení do různých míst @layout.latte
- Kysela_Petr
- Člen | 7
Ahoj, mám podobný problém jako Srigi sablona komponenty – prebublanie bloku .
Komponenta se stará o vykreslení Google Map s markery, aktuálně generuje (zjednodušeně):
{block a}
<div id="semDejMapu"></div>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=muj-api-key&sensor=false"></script>
<script type="text/javascript">
$(document).ready(function(){
initialize();
});
function initialize() {
...Samostatné zpracování mapy a markeru...
}
</script>
{/block}
Což funguje krásně a jak má, ale pouze pokud načítám
JavaScript (jQuery atp.) v hlavičce <head>
.
Já ovšem chci JavaScript načítat až na úplném konci stránky a ne
v hlavičce, tedy před tagem </body>
a to v tomto
případě nefunguje, protože se celá šablona komponenty i s jejím
JavaScriptem vypíše před načtením potřebných skriptů.
Řešení by bylo šablonu v komponentě rozdělit na dva bloky:
{block a}
<div id="semDejMapu"></div>
{/block}
{block b}
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=muj-api-key&sensor=false"></script>
<script type="text/javascript">
$(document).ready(function(){
initialize();
});
function initialize() {
...generování mapy a markerů...
}
</script>
{/block}
A do @layoutu dát:
<body>
{include #content}
...
{control map}
...
{control javascript}
...
{include #b}
</body>
Znáte někdo prosím řešení?
- duke
- Člen | 650
Co jít na to přes 2 render metody té komponenty? Jednu pak volat v bloku #content, druhou např. v bloku #scripts (který bude až těsně před </body>) v duchu 2. odstavce této části dokumentace. Tj. nějak takto:
{block #content}
...
{control googleMap:placeholder}
...
{/block}
{block #scripts}
{include #parent}
{control googleMap:script}
{/block}
- Filip Procházka
- Moderator | 4668
To bohužel není možné a nevypadá to, že to někdy brzo možné bude. Řešení co napsal @**duke** je velice elegantní a snad ještě nikdy jsem ho tady na fóru neviděl, chválím :)
Já osobně používám tohle.