Framework Nette

Nette: Multiplier

Multiplier v Nette je nástroj pro vytváření komponent dynamicky za běhu.

Umožňuje definovat továrničku pro více komponent.

Funguje na principu vnořených komponent – každá komponenta zděděná od NetteComponentModelContainer může obsahovat další komponenty.

API: https://api.nette.org/Nette.Application.UI.Multiplier.html

Příklad: Výpis produktů v eshopu s formulářem pro vložení

Řešení 1 (bez použití multiplieru)

Celý výpis obalíme do jednoho formuláře.

Řešení 2 (s použitím multiplieru)

Multiplier vystupuje v pozici rodiče, který své potomky dokáže vytvářet dynamicky pomocí callbacku předaného v konstruktoru.

protected function createComponentShopForm()
{
    return new Multiplier(function ($itemId) {
        $form = new NetteApplicationUIForm;
        $form->addText('count', 'Počet zboží:')
            ->addRule($form::FILLED)
            ->addRule($form::INTEGER);
        $form->addHidden('itemId', $itemId);
        $form->addSubmit('send', 'Přidat do košíku');
        return $form;
    });
}

V šabloně u každého zboží vykreslíme formulář, kde každý bude unikátní komponentou.

{foreach $items as $item}
    <h2>{$item->title}</h2>
    {$item->description}

    {control shopForm-$item->id}
{/foreach}

Formát argumentu předaný makru {control}:

{control shopForm-$item->id}
  • shopForm – název komponenty
  • $item->id – id potomka

Postup:

  1. první iterace foreach
    1. shopForm neexistuje – zavolá se továrnička createComponentShopForm
    2. na vrácrené komponentě (instanci Multiplieru) je zavolána továrnička konkrétního formuláře (anonymní funkce předaná v konstruktoru Multiplieru)
  2. druhá a další iterace foreach
    1. komponenta shopForm již existuje
    2. hledáme vždy jiného potomka komponenty shopForm (dle $item->id) – znovu je volána anonymní funkce která vrací nový formulář

Každá továrnička dostává jako svůj první argument název tvořené komponenty ($item->id).

Zdroje

  • https://pla.nette.org/cs/multiplier
  • https://doc.nette.org/cs/2.4/components#toc-komponenty-do-hloubky
  • https://pla.nette.org/cs/posobota-36-jan-tvrdik-komponenty

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *