Predani promenne z presenteru do sablony jine nez default.latte

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

Ahoj,

řeším už několik hodin takový problém, že chci předat z presenteru výsledek z databáze do jiné než defaultní šablony, ale stále se mi to nedaří.

// v presenteru presenters/HomepagePresenter.php
class HomepagePresenter extends BasePresenter {

  protected function createComponentSearchBooksForm(){
    ...
  $this->template->results = $this->users->searchBook($this->values['retezec']);
  }
}
// šablona results.latte (templates/Homepage/results.latte)
{block content}

{foreach $results as $result} // tady to skončí tím, že proměnná results je nedefinovana
 ...
{/foreach}

V šabloně default.latte mohu k proměnné results přistoupit, ale nevím jak ji dostat do jiné šablony (ve stejné složce). Určitě je to jednoduché, ale nedaří se mi na to přijít ani najít nějakou ukázku. Díky.

EDIT: odpovědí na otázku je použití renderJmenoSablony()… Řeším teď ale ještě jeden problém, a to předání parametru této funkci, z nějakého důvodu se předává NULL z funkce reagující na stisk tlačítka formuláře.

Když mám funkci v HomepagePresenteru

renderResults(){
$this->template->results = select nad databazi;
}

Mohu nejak pridat této funkci parametr? Když se totiž pokusím o toto

renderResults($name){
$this->template->results = $this->users->db->query('SELECT * FROM titul WHERE nazev=?', $name)->fetchAll();
}

Tak se funkci renderResult záhadně předá NULL (alespoň podle nette debug baru, ale vzhledem k tomu že se nic nenajde, tak to bude asi pravda). Nicméně, jsem si jistý že funkci volám s řetězcem, který není NULL.
Metodu renderResults volám v HomepagePresenteru ve funkci

public function searchBooksFormSubmitted(UI\Form $form)
{
  $this->values = $form->getValues();
  $this->renderResults($this->values['jmenoKnihy']);
  $this->redirect('Homepage:results');
}

Editoval eressiel (20. 11. 2014 22:17)

David Matějka
Moderator | 6445
+
0
-

Trosku to rozepis – v jake metode presenteru to plnis? v jake „jine nez defaultni sablone“?

Jan Tvrdík
Nette guru | 2595
+
0
-

Budu hádat a tipnu si, že hledáš

{include sablona.latte, results => $results}
eressiel
Člen | 5
+
0
-

Nevím, jestli jsem to pochopil správně, zkusil jsem si přidat do šablony results.latte

{include default.latte, results => $results}

ale nepomohlo to.
Ale jak jsem se dival do dokumentace, tak si myslím, že to není úplně to co hledám, protože tímto bych si includoval celý obsah dané šablony, nebo se mýlím? Já jen potřebuji dostat se k proměnné $results.

Editoval eressiel (20. 11. 2014 20:07)

MartinitCZ
Člen | 580
+
0
-

Prosím projsi si quickstart, tam odpověd najdeš.

Editoval MartinitCZ (20. 11. 2014 20:13)

Šaman
Člen | 2666
+
0
-

$this->template je šablona pohledu presenteru (všech poděděných). Jestli chceš proměnnou předat do jiné šablony (do komponenty, šablony emailu), tak ji tam musíš předat ručně.
Jak vlastně ‚spouštíš‘ tu šablony result.latte?

eressiel
Člen | 5
+
0
-

Děkuju, renderResults() bylo to, co jsem hledal.

eressiel
Člen | 5
+
0
-

Prosím, mohl bych mít ještě dotaz?
Když mám funkci v HomepagePresenteru

renderResults(){
$this->template->results = select nad databazi;
}

Mohu nejak pridat této funkci parametr? Když se totiž pokusím o toto

renderResults($name){
$this->template->results = $this->users->db->query('SELECT * FROM titul WHERE nazev=?', $name)->fetchAll();
}

Tak se funkci renderResult záhadně předá NULL (alespoň podle nette debug baru, ale vzhledem k tomu že se nic nenajde, tak to bude asi pravda). Nicméně, jsem si jistý že funkci volám s řetězcem, který není NULL.
Metodu renderResults volám v HomepagePresenteru ve funkci

public function searchBooksFormSubmitted(UI\Form $form)
{
  $this->values = $form->getValues();
  $this->renderResults($this->values['jmenoKnihy']);
  $this->redirect('Homepage:results');
}
Šaman
Člen | 2666
+
0
-

Voláš ji špatně. Použij

<?php
$this->redirect('Homepage:results', $name);
?>

Ale tohle všechno je v základní dokumentaci, přečti si ji nejdřív.

eressiel
Člen | 5
+
0
-

Aha takhle se to dělá… Tak teď už tomu rozumím, nicméně, přesně v tomto místě dokumentace jsem už minimálně jednou byl, ale toto jsem si z toho neodvodil.