Re-definice blocku v šabloně komponenty
- uestla
- Backer | 799
Pěkný podvečer.
V layoutu mám definovaný prázdný block title
:
<title>Moje aplikace – {block title|striptags|trim}{/block}</title>
V šabloně default.latte
je pak toto:
{block content}
{control myControl}
A konečně v šabloně vkládané komponenty je následující:
<h1 n:block="title">Můj titulek</h1>
O co mi kráčí jest, že mi titulek definovaný v šabloně komponenty neprobublá do layoutu :-(
Dělám něco špatně, resp. existuje nějaké schůdné řešení?
Děkuji…
- na1k
- Člen | 288
Nedávno jsem na to taky narazil … mám takové tušení, že nešlo
o komponentu, ale {include}
konkrétního latte souboru. Princip
ale bude asi podobný.
Novou dokumentaci jsem četl, ale žádné výjimky z dědičnosti bloků jsem nenašel (anebo mi unikly). Stejně tak v issues nic není.
Takže buď to nikdo nepoužívá (to bych se divil) anebo děláme něco špatně :-P
- David Grudl
- Nette Core | 8228
Vkládaný control nemůže ovlivňovat bloky nadřazené šablony, to by vedlo k nepříjemným jmenným konfliktům.
- srigi
- Nette Blogger | 558
22 napsal(a):
Napr. v mojom pripade mi to je na nic:
@layout.latte
...
{block javascripts}{/block}
</body>
</html>
default.latte
bla bla bla
...
{include '@comments.latte'}
@comments.latte
bla bla bla
...
{block javascripts}
<script src="{$basePath}/js/blaBlaBla.js"></script>
{/block}
Toto mi v bete neprebubla.
- uestla
- Backer | 799
Zkusil jsem tedy následující „jednoduchý“ workaround:
@layout.latte zůstává stejný
Dále default.latte:
{block content}
{includeblock '../_common/myControl.latte', control => $control['myControl']}
Jako komponentu myControl
uvažujme instanci třídy
MyControl
:
class MyControl extends BaseControl
{
public function load()
{
return array(
'title' => 'My Title',
);
}
}
A finálně šablona _common/myControl.latte:
{var $myControl = $control->load()}
<h1 n:block="title">{$myControl['title']}</h1>
Bohužel ani tutonc nezafunguje, přestože ke vkládání šablony
s definicí bloků dochází již v úrovni šablony akce… Defaultní block
title
definovaný v layoutu tak zůstane nezměněn.
Někdo jakýkoli nápad? :-(
Děkuji.
- uestla
- Backer | 799
Tak jsem narazil na následující: https://forum.nette.org/…o-block-name#….
Bohužel je v tomhle případě funkce makra {includeblock ...}
tak nějak neočekávaná :-(
V tom případě jsem se co se týče bezradnosti moc neposunul…
- na1k
- Člen | 288
Dovolím si oživit, protože mi tahle funkčnost dost chybí a nechci ji hackovat skrze attached a pomocné proměnné.
Nevidím do šablon do hloubky, ale jestli je problém jen ve jménech bloků, tak to je řešitelné, ne?
Stejně si myslím, že drtivá většina případů užití by byla
doplňování dodatečných dat do <head>
. Proč by tedy
nemohla komponenta udělat něco jako
{block #head}
{include #parent}
<script></script>
{/block}
normální výstup komponenty