komponenta – dvě view v sobě

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

Ahoj,

mám jednu komponentu a mohu ji nastavit dvě různá view.

Pokud chci view1 zobrazit ve view2 tak mi to vyhodí chybu…

netušíte jak na to?

Díky

frosty22
Člen | 373
+
0
-

Jestli jsem to pochopil správně tak máš něco jako:

<?php
class FooControl extends Control {

  public renderFoo()
  {
    $tpl = $this->createTemplate();
    $tpl->setFile("foo.latte");
    $tpl->render();
  }

  public renderBar()
  {
    $tpl = $this->createTemplate();
    $tpl->setFile("bar.latte");
    $tpl->render();
  }

}
?>

Potom máš tedy dvě view a můžeš volat v šabloně třeba (počítám s createComponentFoo v presenter):

{control foo:foo}
{control foo:bar}

Ale ty bys chtěl tedy mít v šabloně foo.latte vykreslené i to druhé view bar.latte?

Tohle asi bych řešil spíše includováním té části, která sdílená mezi oběmi šablonami do obou šablon. Jinak teoreticky by mohlo jít (nezkusil jsem), když předáš tu komponentu šabloně a vykreslíš:

<?php
  public renderFoo()
  {
    $tpl = $this->createTemplate();
    $tpl->setFile("foo.latte");
    $tpl->fooControl= $this; // předám do šablony
    $tpl->render();
  }
?>

A v šabloně foo.latte pak:

{control $fooControl bar} - tím si nejsem jist
{? $fooControl->renderBar() ?} - tohle by již mělo
batko
Člen | 219
+
0
-

vyřešeno, ukážu na tvém kodu

<?php
class FooControl extends Control {

  public renderFoo()
  {
    $tpl = $this->createTemplate();
    $bar = $this;
    $tpl->setFile("foo.latte");
    $tpl->render();
  }

  public renderBar($id)
  {
    $tpl = $this->createTemplate();
    $tpl->setFile("bar.latte");
    $tpl->render();
  }

}
?>

latte foo

<?php
{$bar->renderBar($id)}
?>

mě to funguje, má nekdo lepší nápady?

@frosty22 díky za nasměrování :-)