Ziskani parametru v url z komponenty

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

Zdravim, trochu jsem se zasekl, prosim o radu:

Mam komponentu v tomto pripade je to kalendar. V sablone komponenty posilam parametr do url:

<a n:href="this, 'id' => $row['id']">{$row->name}</a>

do url se me to dostane jako calendar-id, ale na stejne strance mam i formular, kam potrebuju dostat

$form->addHidden('id', $this->getParametr('calendar-id'));

Ovsem ja se na tento parametr ve formulari nedostanu.

Jak prosim tedy spravne predam parametr z komponenty do presenteru?

Dekuji

Editoval MW (18. 1. 2013 11:23)

ViPEr*CZ*
Člen | 817
+
0
-

A nešlo by formulář zaregistrovat jako komponentu kalendáře? Pak v továrně formuláře, která by byla v kalendáři jen předáte ten parametr, který patří kalendáři a při vytváření formuláře o něm komponenta kalendáře ví.

MW
Člen | 626
+
0
-

Dekuji za odpoved.

Asi budu muset. Ted jsem narazil na podobny problem, kdy jsem opet do sablony pridal link na smazani udalosti, ovsem metodu na smazani mam zas v presenteru. Nesel by pouzit jen {plink} ???

Uvazoval jsem tak, ze pokud pouziju komponentu (cizi komponentu), kterou budu treba v budoucnosti aktualizovat, nechci do ni moc zasahovat a vse potrebne co potrebuji navic si udelam bokem, tedy v preseneru.

Komponenta ma totiz vlastni model, ktery implementuje sve rozhrani. A tak me prislo slozite, to cele prepisovat, jak Interface tak v model.

Je to tedy tak, ze by se parametry nemely touto cestou predavat?

Mimochodem jsem myslel, ze pokud je parametr v URL, tak metoda getParameter() jej vidi..

Dekuji !

Editoval MW (18. 1. 2013 12:03)

MW
Člen | 626
+
0
-

Mimochodem zkousim ten {plink z komponenty}

pokud si tam dam odkaz :

<a href="{plink Calendars:deleteEvent, id => $row['id']}">[SMAZAT]</a><br />

a v presenteru mam deleteEvent() (ten se v poradku vykona)
tak me to hazi chybu:
Page not found. Missing template ..... deleteEvent.latte

Lze to vubec nejak takto resit?

Diky

Editoval MW (18. 1. 2013 12:16)

Michal Vyšinský
Člen | 608
+
0
-

Mimochodem jsem myslel, ze pokud je parametr v URL, tak metoda getParameter() jej vidi..

No měl by to presenter vidět. Schválně zkus dumpnout volání této metody bez parametru (vrací pole všech $_GET)

A co se týče toho posledního příspěvku:
Toto by měl být signál! Takže v plink volej Calendars:deleteEvent! jako signál a metodu přejmenuj jako „handleDeleteEvent“. Po zpracování signálu přesměruj a je po problému.

MW
Člen | 626
+
0
-

Diky!
Toto funguje:

function handledeleteEvent($id) {
	$this->context->database->table('calendar')->where('id', $id)->delete();
	$this->flashMessage('Smazáno');
	$this->redirect('Calendars:');
    }
<a href="{plink deleteEvent!, id => $row['id']}">[SMAZAT]</a><br />

Co se tyce parametru, tak dump me vyhodi pouze ty, se kterymi pracuju v aktualnim presenteru.
To co se do url dostalo v komponente (byt je volana ve stejnem presenteru), to tam neni. Ale v URL ji vidim :-(

Michal Vyšinský
Člen | 608
+
0
-

HttpRequest
Tak už to získat snad jen přes:

$presenter->context->httpRequest->getQuery("NAZEV PARAMETRU"); // $presenter = $this v presenteru :)

Edit:
A nebo když to zavoláš bez parametru tak vrací opět pole všech parametrů v url.

Editoval CherryBoss (18. 1. 2013 14:18)

ViPEr*CZ*
Člen | 817
+
0
-

Opět… proč má presenter pracovat s parametrem komponenty? Proč ho nespracujete v komponentě?

hAssassin
Člen | 293
+
0
-

Presne jak pise ViPErCZ, cely mi to prijde nejaky divny… Ted si vytvoril komponentu aby jsi ji mohl pouzivat na vic mistech a hned potom si ji na pevno svazal s presenterem, protoze ted kdekoliv pouzijes tu komponentu budes muset implementovat i signal v presenteru. Fakt postaveny na hlavu…

Neslo by bud jak pise ViPErCZ cely to zpracovat v komponente nebo kdyz uz vytvorit callback ktery by byl implementovany v presenteru ale volal by se ze signalu komponenty?

MW
Člen | 626
+
0
-

Uz me svita. Panove moc diky… asi me chybela veta „Ted si vytvoril komponentu aby jsi ji mohl pouzivat na vic mistech“ ;)

Pristupoval jsem k tomu tak, ze toto nebudu pouzivat v aplikaci nikde jinde…

Muzu, ale poprosit o vysvetleni nebo odkaz, proc to ten parametr nevidi.. ted me to uz zajima ciste z duvodu pochopeni … predelam to do komponenty…

Moc diky !!!

ViPEr*CZ*
Člen | 817
+
0
-

Nevidí to z důvodu vnitřní logiky Nette.

MW
Člen | 626
+
0
-

Diky moc za odpovedi…

Ac je to urcite proti vsemu, tak toto funguje…
Spravne to neni, ale zkusil jsem to ciste pro zajimavost…

$form->addHidden('id', $this->context->httpRequest->getQuery('calendar-id'));

Diky vsem !

ViPEr*CZ*
Člen | 817
+
0
-

MW napsal(a):

Diky moc za odpovedi…

Ac je to urcite proti vsemu, tak toto funguje…
Spravne to neni, ale zkusil jsem to ciste pro zajimavost…

$form->addHidden('id', $this->context->httpRequest->getQuery('calendar-id'));

Diky vsem !

No jasně… nebo také $_GET[‚calendar-id‘]; Když to je v URL, tak to by v tom byl čert, aby to nešlo nějak vycucnout :-)
Mnohem hezčí bude persistentní parametr v jedné komponentně co se třeba setterem nastaví do druhé subkomponenty oné komponenty při vytváření oné subkomponenty. ;-)

castamir
Člen | 629
+
0
-

Mnohem hezčí bude persistentní parametr v jedné komponentně co se třeba setterem nastaví do druhé subkomponenty oné komponenty při vytváření oné subkomponenty. ;-)

Nemluvíš jazykem mého kmene :D

ViPEr*CZ*
Člen | 817
+
0
-

castamir napsal(a):

Mnohem hezčí bude persistentní parametr v jedné komponentně co se třeba setterem nastaví do druhé subkomponenty oné komponenty při vytváření oné subkomponenty. ;-)

Nemluvíš jazykem mého kmene :D

Tak pomůžu.
Super přednáška o komponentách: https://www.youtube.com/watch?…
Persistentní parametry: https://doc.nette.org/…n/presenters#…

castamir
Člen | 629
+
0
-

**@ViPEr\*CZ\*** to video vypadá zajímavě, možná se i něčemu přiučím ;) Dík

ViPEr*CZ*
Člen | 817
+
0
-

castamir napsal(a):

**@ViPEr\*CZ\*** to video vypadá zajímavě, možná se i něčemu přiučím ;) Dík

Jj to je… naučíš se tam obsluhovat komponenty jako kontejnery. Například pokud chce člověk kalendář, který bude mít svůj formulářem na obsluhu událostí, tak bez toho to nejde zapouzdřit jako jednu komponentu. Takhle si jen udělá člověk komponentu kalendáře a do něj přidá komponentu formuláře. V projektech pak ale vytvořím jen továrnu na kalendář a vykreslím {control calendar} a už má k dispozici rovnou kalendář a jeho formulář. :-)