Zpracování signálu (delete!) z „Front“ v „Admin“
- Amgis
- Člen | 8
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
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
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
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… :)