přepsání bloku v layoutu z inkludované šablony
- ondraLE
- Člen | 23
Předem se omlouvám za možná stupidní dotaz, ale už to zkouším den a
bez výsledku. Mám hlavní layout, který na konci natahuje jquery a další JS
scripty. Poté definovaný blok {block scripts}{/block}
. Pokud do
renderované šablony např. „view,latte“, dle presenteru dám něco do
tohoto bloku pomocí
{block scripts}<sript>alert("aaa");{/block}
vloží se to na
správné místo do renderované stránky (tedy na konec html). Pokud
v šabloně chci includovat další šablonu např. „subview.latte“ ,
která bude obsahovat přepsání tohoto bloku, vloží se to do content a
nikoli nakonec. Tedy dotaz: jak vložit javascript z includované šablony na
správné místo v layoutu?
- m.brecher
- Generous Backer | 864
@ondraLE
Je potřeba říct latte, aby vložilo z includované šablony konkrétní blok:
included.latte:
{block 'content'}
<p>content</p>
{/block}
{block 'head'}
<style>
//.....
</style>
{/block}
Šablona akce:
{block 'content'}
{* ..... *}
{include 'content' from 'included.latte'}
{/block}
{block 'head'}
{include parent}
{* ..... *}
{include 'head' from 'included.latte'}
{/block}
Editoval m.brecher (3. 12. 2023 16:59)
- ondraLE
- Člen | 23
@mbrecher Ještě bych se chtěl vrátit k řešení, mám layout tam mám
{block #javascript}{/block}
mám nějakou šablonu a ta zobrazuje komponentu (control), v latte této šablony mám např:
{define javascript}
<script>
alert("!aa");
</script>
{/define}
pokud do šablony, kde je tato komponenta zobrazena vložím dle návodu include from..
{define javascript}
{include 'javascript' from 'controls/blockReservation.latte'}
{/define}
vše funguje, ale pokud bych chtěl obecně vložit jakýkoli block „javascript“ z šablony komponenty? Nechci vyjmenovávat všechny možné, ale dát obecně, lze to?
>
{block 'content'} {* ..... *} {include 'content' from 'included.latte'} {/block} {block 'head'} {include parent} {* ..... *} {include 'head' from 'included.latte'} {/block}
- m.brecher
- Generous Backer | 864
@ondraLE
obecně vložit jakýkoli block „javascript“ z šablony komponenty
Potřebuješ ze šablony komponenty vkládat bloky do šablony akce ??
Šablony komponenty poděděné z UI \Control např. myControl.latte nemají v latte vestavěnou automatickou podporu pro vykreslování bloků. Značka {control} automaticky vykreslí všechny bloky {block} v šabloně myControl.latte do jednoho místa. V šabloně komponenty tak nemá cenu tagy {block} používat.
Jde ale vykreslovat bloky ze šablony komponenty pomocí workaroundu. Šablonu komponenty postavíš takto:
- html které chceme vykreslit značkou {control} umístit mimo bloky
- html, které chceme vykreslit do jiného bloku umístíme do bloků {define}, které značka {control} automaticky nevykresluje
- bloky {define ‚blockName‘} vkládáme pomocí {include ‚blockName‘ from ‚myControl.latte‘} do jiných bloků v šabloně akce
Příklad:
myControl.latte
<p>main html of the control</p>
{define 'javascript'}
{* some javascript *}
{/define}
{define 'style'}
{* some css style *}
{/define}
a šablona akce:
{block 'content'}
{control 'myControl'}
{/block}
{block 'javascript'}
{include parent}
{include 'javascript' from 'myControl.latte'}
{/block}
{block 'style'}
{include parent}
{include 'style' from 'myControl.latte'}
{/block}
Editoval m.brecher (23. 10. 13:54)
- ondraLE
- Člen | 23
Potřebuješ ze šablony komponenty vkládat bloky do šablony akce ??
ano, mám kopmonentu, která má svůj form, ve formu mám picker na date
(flatpicker) a potřebuji jej po načtení iniciovat (a další logiku),
pokud to dám do šablony komponenty, není ještě iniciovaný jQuery (to mám
v layoutu až dole), tohle se vyrenderu dříve, a hodí to chybu.
To je celý problém. Jde mi fakticky jen o umístění nějakého kódu do
posledního místa vygenerovaného HTML.
- m.brecher
- Generous Backer | 864
@ondraLE
Jde mi fakticky jen o umístění nějakého kódu do posledního místa vygenerovaného HTML.
tak použij řešení jaké jsem Ti poslal a do šablony layoutu úplně na konec dej prázdný blok
layout.latte
{block 'footer'}{/block}
</html>
V šablonách akcí, kde vkládáš komponentu vytvoř příslušný blok:
createXyz.latte
{block 'footer'}
{include 'javascript' from 'myControl.latte'}
{/block}