Šablona v pomocí komponenty

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

Čus guys. Mám takový problém a to je při výpisu příspěvků. Mam třídu WritePostsFactory, kde se odkazuju na šablonu ve které se objevuje i tento kód:

<td><button type="button"><a n:href="show, $post->id">Zobrazit</a></button></td>

A aplikace mi po spuštění vyhodí tuto chybu:

Invalid link: Unknown signal 'show', missing handler App\Forms\WrtiteProjectsFactory::handleshow()

Nevíte někdo co s tím prosím ?

ali
Člen | 342
+
+1
-

Chybi ti v tride App\Forms\WrtiteProjectsFactory metoda handleshow

edit
Typuju ze se chces odkazovat na nejakou akci prezenteru, tak to musis napsat korektne

<td><button type="button"><a n:href="Presenter:action, $post->id">Zobrazit</a></button></td>

Editoval ali (13. 7. 2017 7:55)

petrkasnal
Člen | 42
+
0
-

Dík za odpověď. Myslíš tím, že to má být tkhle ?

<td><button type="button"><a n:href="Homepage:show, $project->id">Zobrazit</a></button></td>

Takhle mi to nefunguje…
chyba: Component with name ‚Project‘ does not exist.

Editoval petrkasnal (13. 7. 2017 10:05)

Zuben45
Člen | 268
+
0
-

petrkasnal napsal(a):

Dík za odpověď. Myslíš tím, že to má být tkhle ?

<td><button type="button"><a n:href="Homepage:show, $project->id">Zobrazit</a></button></td>

Takhle mi to nefunguje…
chyba: Component with name ‚Project‘ does not exist.

však to už je další a jiná chyba ;)

petrkasnal
Člen | 42
+
0
-

Ajo ale furt nevím co s ní.. Nebo teda chápu co ta chyba znamená, ale nevím jak jí ppravit

Zuben45
Člen | 268
+
0
-

petrkasnal napsal(a):

Ajo ale furt nevím co s ní.. Nebo teda chápu co ta chyba znamená, ale nevím jak jí ppravit

Je to stejné jak u předchozího, chybí komponenta s názvem Project, takže vytvořit ;)

petrkasnal
Člen | 42
+
0
-

Hele asi si uplně nerozumíme…
Mam třídu WritePostsFactory kde mám tento kód:

    public function render($posts) {
        $template = $this->template;
        $template->setFile(__DIR__.'/../presenters/templates/Homepage/WritePosts.latte');
        $template->posts = $posts;
        $template->render();
    }

A je uložená v app/forms
Dále mám šablonu na kterou odkazuje:

<td><div>{$post->id}</div></td>
<td><div>{$post->name}</div></td>
...

Pak si vytvořím nový objekt třídy WritePostsFactory v Homepage, díky tomu vytvořím komponentu a tu si zavolám v default.latte.

newPOPE
Člen | 648
+
+1
-

@petrkasnal daj sem celu sablonu takto to je len hadanie o tom co tam vsetko mas.

petrkasnal
Člen | 42
+
0
-

Dobře tady je

{block content}
<table>
    <div n:foreach="$posts as $post">
        <tr>
            <td><div>{$post->id}</div></td>
            <td><div>{$post->name}</div></td>
            <td><div>{$post->type}</div></td>
          <td><button type="button"><a n:href="show, $post->id">Zobrazit</a></button></td> <!-- Toto nefunguje -->
        </tr>
    </div>
</table>
{/block}

Editoval petrkasnal (13. 7. 2017 13:06)

newPOPE
Člen | 648
+
0
-
n:href="show ..."

Bude vyzadovat implementovanu metodu handleShow na komponente. To je to co spomina @ali.

Ziadnu Project komponentu tam nevidim (Component with name ‚Project‘ does not exist.) cize tipujem, ze to je zas problem v inej komponente/sablone.

petrkasnal
Člen | 42
+
0
-

Promiň má tam být: Component with name ‚Homepage‘ does not exist. Je to něco jiného promiň

Jinak metoda renderShow vypadá takto:

 public function renderShow($postId) {
        $this->template->post = $this->postManager->getRecordById($postId);
    }

Tato metoda je umístěna v Homepage

newPOPE
Člen | 648
+
0
-

@petrkasnal okej tak ked tam mas ... Homepage ... tipujem, ze to bude problem kedys a odkazujes na komponentu ktora neexistuje ale myslis tym presenter. Cize prepisat na:

<a href="{plink Homepage ...}">...</a>

n:href funguje len na „sam na seba“ alebo subkomponenty. Neda sa cez neho odkazovat na Presentery alebo nadradene komponenty myslim.

petrkasnal
Člen | 42
+
0
-

Ježiš tk to je super díky moc ! Todle jsem potřeboval takže dvě mouchy jednou ranou děkuju moc :) funguje :)