Definice bloku v komponentě a vložení do @layout

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

Potřeboval bych poradit, jak mohu v komponentě definovat blok, který následně vypíšu do @layout.latte pomocí

{ifset #scripts}{include scripts}{/ifset}

v komponentě mám

{define scripts}
        <script>
{/define{

Editoval Tirus91 (11. 9. 2014 18:18)

David Matějka
Moderator | 6445
+
0
-

nepude to, layout nevidi do sablony komponenty. budes muset vymyslet jiny pristup.

castamir
Člen | 629
+
+4
-

Komponenty mohou mít více render metod a do každé z nich můžeš dát něco jiného (do jedné třeba formulář, do druhé skripty na jeho ovládání). Všimni si zejména názvu druhé metody renderJs a ve druhé ukázce si všimni makra control:

class MyControl extends Nette\Application\UI\Control
{
    public function render()
    {
        /** @var Template $template */
        $template = $this->createTemplate();
        $template->setFile(__DIR__ . '/control.latte');
        $template->render();
    }

    public function renderJs()
    {
        /** @var Template $template */
        $template = $this->createTemplate();
        $template->setFile(__DIR__ . '/javascript.latte');
        $template->render();
    }
}

a v šabloně, kde si vytvoříš instanci výše uvedené komponenty pak můžeš udělat následující:

{block content}
    <h1>Komponenta</h1>
    {control myControl}
{/block}

{block scripts}
    {include parent}
    {control myControl:js}
{/block}