Zpracování signálu (delete!) z „Front“ v „Admin“

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

Ahoj.
Chtěla bych se zeptat, zda jde nějakým způsobem zpracovat signál z front části webu v presenteru co je v admin části. Tato činnost by byla možná až po přihlášení uživatele.

Zkoušela jsem to způsobem:

<?php
<a href="{link :Admin:AddNews:delete! $text->id}" onclick="return confirm('Smazat?')" title="Smazat">Smazat</a>
?>

$text->id je vypisováno funkcí foreach zároveň s ostatními daty…
Nicméně to píše chybu komponenty
Nette\InvalidArgumentException
Component or subcomponent name must not be empty string.

Pokud mám tento signál v admin části na konkrétní stránce, tak mazání dat z DB podle ID funguje.
Jasně že by to šlo přidáním funkce do konkrétního presenteru i na Front části, ale zdá se mi zbytečné tuto funkci psát vícekrát. Možná by na to šel udělat i nějaký model, ale to vůbec netuším jak. Potřebuji totiž předat dvě proměnné naráz – jméno tabulky v DB a zároveň ID konkrétního údaje.
Díky za případné rady. :)

Oli
Člen | 1215
+
+2
-

Pokud se nic nezměnilo, tak volat signál z jiného prsenteru nejde. Pokud to chceš mít jen jednou, tak bych to dal do komponenty, kterou bych si uměl představit, že bude umět přidat, editovat a smazat novinku. Z presenteru jde totiž volat signál komponenty, která je potomkem presenteru. Takže by to potom mohlo vypadat takhle:

<a n:href="myComponent-delete! $text->id}" onclick="return confirm('Smazat?')" title="Smazat">Smazat</a>
// presenter
protected function createComponentMyComponent()
{
	// ...
}

// komponenta
public function handleDelete($id)
{
	// ...
}
David Matějka
Moderator | 6445
+
+5
-

Signal je v podstate jen „do“ parametr, takze muzes zavolat signal na jinem presenteru nasledovne:

{link :Admin:AddNew:default id => $text->id, do => delete}

Ale lepsi je pouzit komponenty, jak radi @Oli, pripadne treba traity

Amgis
Člen | 8
+
0
-

Díky. Tohle funguje. Jen jsem to musela trochu rozšířit o název té tabulky.

<?php
{link :Admin:AddNews:default sel=> news, id => $text->id, do => delete}
?>

sel=>news – název tabulky v DB „news“. Ještě to musím udělat dynamicky aby to rozlišovalo dvě tabulky „news“ a „pages“. Pak to bude řešit všechno. I když v podstatě je to jedno. Pro výpis mám dva oddělené presentery, tak tam tam po pořeším jednotlivě. V administraci mám ale jeden presenter pro vkládání jak do tabulky „news“, tak i do „pages“ a tady to budu muset vymyslet.

Poté jako další krok budu vytvářet editaci konkrétního článku v podstatě podobným způsobem, takže pokud mi opět něco nepůjde, tak se zase ozvu… :)