forms-multiplier icon indicating copy to clipboard operation
forms-multiplier copied to clipboard

How to use the multiplier for editing

Open tomminok opened this issue 1 year ago • 5 comments

Hello I'm trying to use a multiplier in a data editing form. According to the records in the database, the appropriate number of Multiplier elements must be displayed.

Unfortunately, I don't know how to properly access the multiplier components.

Can you state the correct use of the multiplier for editing?

$defHeader = json_decode($defVals->header, true);
            
$multiplier = $form->addMultiplier('multiplier', function (\Nette\Forms\Container $container, \Nette\Forms\Form $form) {
    $arrHlavicka = $this->webhookModel->getHlavicka(['stav'=>1])->fetchPairs("nazev", "nazev");

    $container->addSelect('hlavicka', 'Hlavička',$arrHlavicka)
        ->setHtmlAttribute('class', 'form-control')
        ->setHtmlAttribute("placeholder", 'Vyberte hlavičku')
        ->setPrompt('Vyberte hlavičku');

    $container->addText('hlavickaval', 'Request Header')
        ->setHtmlAttribute('class', 'form-control')
        ->setHtmlAttribute("placeholder", 'Hodnota hlavičky');    
}, count($defHeader));   

$multiplier->addCreateButton('Přidat hlavičku')
      ->addClass('btn btn-success');

foreach($defHeader as $k => $v){
    $hlavicka[] = [ 'hlavicka' => $k, 'hlavickaval' => $v ];
}

foreach ($multiplier as $index => $container) {
    $hlavicka = $container->getComponent('hlavicka');
    $hlavickaval = $container->getComponent('hlavickaval');
    
    // Nastavení výchozích hodnot
    $hlavicka->setDefaultValue($hlavicka[$index]['hlavicka']);
    $hlavickaval->setDefaultValue($hlavicka[$index]['hlavickaval']);

    // Přidání tlačítka RemoveButton
    $container->addRemoveButton('Smazat')
              ->addClass('btn btn-danger');
}

Thank you Thomas

tomminok avatar Apr 16 '24 10:04 tomminok

Why not just use $multiplier->setDefaults($hlavicka)?

Also addRemoveButton() is method of multiplier too.

jtojnar avatar Apr 16 '24 12:04 jtojnar

$multiplier->setDefaults($header); It seems to work, it will add two entries with the completed data from the database.

But how to add tl to each item. addRemovButton()?

tomminok avatar Apr 16 '24 12:04 tomminok

Calling Multiplier::addRemoveButton() will ensure each item has a remove button.

jtojnar avatar Apr 16 '24 13:04 jtojnar

please and where to call this Multiplier::add Remove Button()? my full code is below:

$defHeader = json_decode($defVals->header, true);
            
$multiplier = $form->addMultiplier('multiplier', function (\Nette\Forms\Container $container, \Nette\Forms\Form $form) {
    $arrHlavicka = $this->webhookModel->getHlavicka(['stav'=>1])->fetchPairs("nazev", "nazev");

    $container->addSelect('hlavicka', 'Hlavička',$arrHlavicka)
        ->setHtmlAttribute('class', 'form-control')
        ->setHtmlAttribute("placeholder", 'Vyberte hlavičku')
        ->setPrompt('Vyberte hlavičku');

    $container->addText('hlavickaval', 'Request Header')
        ->setHtmlAttribute('class', 'form-control')
        ->setHtmlAttribute("placeholder", 'Hodnota hlavičky');    
    
}, count($defHeader));   

$multiplier->addCreateButton('Přidat hlavičku')
      ->addClass('btn btn-success');

foreach($defHeader as $k => $v){
    $hlavicka[] = [ 'hlavicka' => $k, 'hlavickaval' => $v ];
}

$multiplier->setDefaults($hlavicka);

$multiplier->addRemoveButton('Smazat')
      ->addClass('btn btn-danger');

Thank you

tomminok avatar Apr 16 '24 13:04 tomminok

I would expect your code to work. See also https://github.com/contributte/forms-multiplier/tree/master/.docs#basic-usage

Also please wrap code blocks between ```php and ``` so that syntax highlighting works.

jtojnar avatar Apr 16 '24 13:04 jtojnar