Cesta ku komponente z configu neon
- tomino
- Člen | 14
Mám JEDEN systém, viac zákazníkou, jeden zákazník chce formulár na editáciu stránky inak než ten druhý. Nejde len o šablónu (tú si už viem inkludovať z inej cesty), ide aj o elementy vo formuláry, čiže by som potreboval niečo takéto, načrtnem:
Components
ArticleControl ← default
DruhyZakaznik/ArticleControl
class ArticleControl extends \app\Components\ArticleControl …
V novej komponente DruhyZakaznik/ArticleControl mám override
createComponentArticleForm.
Dá sa niečo takéto použiť? Chcel by som, pokiaľ je v neon nastavene
v premennej „DruhyZakaznik“, tak aby sa použila komponenta
DruhyZakaznik/ArticleControl, v opačnom pripade default komponenta
ArticleControl…
Ako by sa to najkrajšie dalo spraviť?
- Petr Steinbauer
- Člen | 26
Zdravím,
požadovaného bych dosáhl pomocí Továren na komponenty.
Dokumentace:
https://doc.nette.org/…dependencies#…
Kód naslepo:
public function createComponentEditRealtyForm()
{
if ($this->user->isSpecial()) {
return $this->editArticleSpecialFormFactory->create();
}
return $this->editArticleFormFactory->create();
}
Tip
možná je i jiné řešení, toto je první co mě napadlo.
- tomino
- Člen | 14
Chcel som sa vyhnúť tomu aby som všetkym klientom musel nastavoval tovarnicku:
/** @var IArticleControlFactory @inject */
public $articleControlFactory;
/** @var IDruhyZakaznikArticleControlFactory @inject */
public $druhyZakaznikArticleControlFactory;
/** @var IDalsiZakaznikArticleControlFactory @inject */
public $dalsiZakaznikArticleControlFactory;
...
- Petr Steinbauer
- Člen | 26
Rozumím v tom případe bych postupoval takto:
$this->editArticleFormFactory->create($user);
A v jedné jediné továrně si ovlivněte výsledný formulář požadovaným způsobem (a nezapomeňte na onSave)
if ($user->isSpecial()) {
$form->addText('special', 'Vaše speciální okno');
}
- tomino
- Člen | 14
Myslím si že mať vypodmienkovanú metódu na nastavenie formulára je ako to vy hovoríte „prasárna“. Z mojho pohľadu je lepšie/krajšie riešenie mať každý formulár (pre každého zákazníka) v samostatnom súbore …
A áno, v componente, ktorá extenduje defaultnú componentu, overridujem práve tieto dve metódy createComponentArticleForm a onSave.
- Petr Steinbauer
- Člen | 26
tomino napsal(a):
Myslím si že mať vypodmienkovanú metódu na nastavenie formulára je ako to vy hovoríte „prasárna“. Z mojho pohľadu je lepšie/krajšie riešenie mať každý formulár (pre každého zákazníka) v samostatnom súbore …
A áno, v componente, ktorá extenduje defaultnú componentu, overridujem práve tieto dve metódy createComponentArticleForm a onSave.
Ten if je pochopitelně pro demostraci :)
Takže zpět:
Určitě bych nedělal přidávání dle jména klientů jak jste posílal:
/** @var IDruhyZakaznikArticleControlFactory @inject */
public $druhyZakaznikArticleControlFactory;
...
ale rozdělil bych si zákazníky do nějakých funkčních celků které popisují realitu – a ty pospojoval.
Například pomocí $form->addContainer a obepínacího $form->addMyContainer
Čili jeden velký formulář a jednoduše si načte jen ty containery které má mít…
jeden formulář má například:
$form->addMyContainer(self::FORM_SECTION_GENERAL, 'Nemovitost (obecné)');
$form->addMyContainer(self::FORM_SECTION_PRICE, 'Ceny, stav prodeje');
$form->addMyContainer(self::FORM_SECTION_AUCTION, 'Dražba');
a jiný formulář má zase jiný seznam.
Tím pádem nebudete duplikovat žádný kód a jen si vybíráte na co má
zákazník nárok – určuje to role zákazníka a seznam.
Pochopitelně výsledné provedení je na Vás :)