Dva bloky v komponentě a jejich vykreslení do různých míst @layout.latte

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

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
+
0
-

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
+
0
-

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.