Komponenta – formulář – šablona komponenty s proměnným textem
- chr1s
- Člen | 15
Zdravím, řeším následující problém:
V administraci se mi několikrát opakuje potvrzovací formulář pro smazání
nějakého objektu (aktuality, uživatele, dokumentu, atd.) a proto jsem se
rozhodl využít formuláře jako komponenty.
Formulář má vždy dvě tlačítka – Smazat a a Storno + nějaký
potvrzovací text s proměnnou.
Např: „Opravdu si přejete smazat uživatele XYZ?“, „Opravdu si přejete
smazat dokument ABC?“
A snažím se vyřešit, jak tento text s proměnnou předat do šablony dané komponenty aniž bych ho musel nasettovat v presenteru při vytváření komponenty (pokud to tedy jde).
Komponenta DeleteForm:
public function _construct()
{
parent::__construct();
}
public function createComponentDeleteForm()
{
$form = new \Nette\Application\UI\Form();
$form->addSubmit('delete', 'Smazat');
$form->addSubmit('cancel', 'Storno')->setValidationScope(NULL);
// metodu pro zpracovani formulare ted pomineme
return $form;
}
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . 'deleteForm.latte');
$template->render();
}
//setter a getter pro element legend
presenter NewsPresenter:
public function createComponentDeleteForm()
{
$cmp = new DeleteForm();
$cmp->setLegend('Smazání aktuality');
return $cmp;
}
šablona komponenty deleteForm.latte:
{control $control['deleteForm'] begin}
{control $control['deleteForm'] errors}
<fieldset>
<legend>{$control->legend}</legend>
<p>
<!-- Zde potřebuju vypsat větu: "Opravdu si přejete smazat aktualitu $newsItem?" -->
</p>
<p>
{$control['deleteForm']['delete']->control}
{$control['deleteForm']['cancel']->control}
</p>
</fieldset>
{control $control['deleteForm'] end}
a tohle je šablona metody renderDelete() delete.latte:
{block content}
{control deleteForm}
{/block}
Proměnnou $newsItem si do šablony delete.latte předávám pomocí této metody v presenteru:
public function renderDelete($id = 0)
{
$newsItem = $this->getModel($this->model)->getNews()->get($id);
if (!$newsItem) {
$this->flashMessage('Požadovaný záznam nebyl nalezen v databázi!', 'warning');
$this->redirect(':Admin:News:default');
}
$this->template->newsItem = $newsItem;
}
Jenže jí už samozřejmě nemám dostupnou v šabloně komponenty
deleteForm.latte.
Lze toho nějak docílit + abych mohl pro každé vykreslení formuláře dát
jiný potvrzovací text?
Děkuji za odpověď.
- Nox
- Člen | 378
Teď novém configu Nette to půjde určitě skvěle(ji) – použit tvorbu komponent přes faktor- … no jo, ale co zase bez kontextu, by se musel komponentě předat celý kontext…no tak teď nevim :)
Ale jo, možná to půjde. Ala jak jsem se ptal tady: https://forum.nette.org/…dependencies
I když to má zas daň tu, že se může killnout lazy loading, pokud se používá
Takže tu máš asi 4 možnosti :) možná někdo přijde s dalšíma
- předat kontext, vytvářet přes factories
- vytvářet přes factories, ale nastavit v presenteru (viz odkaz)
- vytvářet normálně, ale nastavit v presenteru (viz odkaz)
- vytvářet normálně a všechny závislosti předat
- chr1s
- Člen | 15
Nox napsal(a):
Teď novém configu Nette to půjde určitě skvěle(ji) – použit tvorbu komponent přes faktor- … no jo, ale co zase bez kontextu, by se musel komponentě předat celý kontext…no tak teď nevim :)
Ale jo, možná to půjde. Ala jak jsem se ptal tady: https://forum.nette.org/…dependencies
I když to má zas daň tu, že se může killnout lazy loading, pokud se používá
Takže tu máš asi 4 možnosti :) možná někdo přijde s dalšíma
- předat kontext, vytvářet přes factories
- vytvářet přes factories, ale nastavit v presenteru (viz odkaz)
- vytvářet normálně, ale nastavit v presenteru (viz odkaz)
- vytvářet normálně a všechny závislosti předat
Nejsem si úplně jistej, zda vím, co mám přesně dělat. Co představují ty jednotlivé služby serviceA, serviceB atd?