$presenter->link(), {link}, {plink} rozdíl

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

Chci se zeptat, jaky je rozdil mezi temito zapisy:

<a href="{$presenter->link('this',array('page'=>2))}">{$product->product_name}</a>
<a href="{link 'this', array('page'=>2)}">{$product->product_name}</a>
<a href="{plink 'this', array('page'=>2)}">{$product->product_name}</a>

První funguje, druhy a treti pise error: Unable to pass parameters to action 'blablabla', missing corresponding method.

Diky

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

První a třetí zápis by měl vést k totožnému výsledku. Druhý zápis by byl totožný s:

$control->link('this', array('page' => 2));

Nevím, jestli to může i způsobovat onu chybu, ale destinace (v tomto případě this) se nikdy neuvádí s uvozovkama okolo. Pro úplnost, {link} se používá v základních šablonách pohledů chová úplně stejně jako {plink}, protože v nich $control == $presenter. {plink} existuje kvůli komponentám (extends UI\Control), kde $control je v šabloně instance komponenty, takže odkaz na presenter je třeba volat nad $presenter, od čehož je právě {plink}.

Editoval vojtech.dobes (6. 5. 2012 15:24)

simPod
Člen | 383
+
0
-

zkusil jsem {plink} s this bez uvozovek, ale vysledek je stejny

kazdopadne diky za vysvetleni

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Zkus ukázat odpovídající presenter/komponentu, ke které ta šablona patří.

simPod
Člen | 383
+
0
-

v podst. se jedna jen o toto:

{block content}
<a href="{plink 'this', array('page'=>2)}">test</a>
{/block}
<?php

namespace FrontModule;

class MyPresenter extends BasePresenter {

    /** @persistent */
    public $slug;

    /** @persistent */
    public $page;

    function startup() {
        parent::startup();

        $this->setView('default');
    }

    function renderDefault() {

    }

}
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Aha, tak určitě stačí použít {link} (protože je to šablona pro view, nikoliv pro komponentu), respektive n:href, což je jen atributová kratší varianta.

Jenom netuším, proč ti to hlásí blablabla, kde se ten řetězec bere? To z tvého kódu nevyplývá.

duke
Člen | 650
+
0
-

Nepíše se:

{plink 'this', array('page'=>2)}

ale

{plink this, page => 2}
simPod
Člen | 383
+
0
-

aha, {plink this, page => 2} je ono

diky vsem

redhead
Člen | 1313
+
0
-

Mám slabý pocit, že když použiju pole, pošle se jako parametr ono pole. Pokud chci jednotlivé prvky pole použít jako parametry slouží k tomu jakési „přetypování“ pomocí (expand).

{plink this, (expand) $poleParametru}

Editoval redhead (6. 5. 2012 20:51)

Tetragramat
Člen | 3
+
0
-

duke napsal(a):

Nepíše se:

{plink 'this', array('page'=>2)}

ale

{plink this, page => 2}

Bylo by dobré tohle doplnit do dokumentace, protože tam chybí. Právě jsem řešil stejný problém a po hodině zkoušení různých možností, hledání v dokumentaci a na foru jsem našel tuhle spásu.

redhead
Člen | 1313
+
0
-

Nechybí

Editoval redhead (15. 6. 2012 17:08)