Manuální vykreslení formuláře – Multiplier + Replicator

- Croc
 - Člen | 270
 
Zdravím,
mám dynamicky generovaný formulář, který potřebuji manuálně vykreslit
(opravdu nevím kolik a jaké položky ve formuláři budou, vše je načítano
z DB).
Formulář se opakuje na stránce několikrát takže je generovaný přes
Multiplier. Může také obsahovat 0-X addDynamic také
s generovaným obsahem.
Pokud nechám vykreslit formulář Nette automaticky, nějaké prvky se vykreslí jinak než potřebuji. Jedinou volbou je vykreslit formulář manuálně a navolit si html/css dle potřeby pro různé prvky.
A to je pro mě ten problém. Zkusil jsem formulář vygenerovat takto:
{form form}
    <table>
        {foreach $form->getControls() as $sid => $cntrl}
            <tr>
                <td>{label $cntrl /}</td>
                <td>{input $cntrl}</td>
            </tr>
        {/foreach}
    </table>
{/form}
Formulář vykreslí všechny prvky, ale nevykreslí například skupiny,
které jsem definoval pomocí addGroup().
Nevíte někdo prosím jak na to?
Díky
EDIT:
Pokud form vykreslím takto:
{form form}
    <table>
        {foreach $form->getGroups() as $key => $group}
            <th>
                <hr>
                <h3>{$key}</h3>
                <hr>
            </th>
            {foreach $group->getControls() as $sid => $cntrl}
                <tr>
                    <td>{label $cntrl /}{input $cntrl}</td>
                </tr>
            {/foreach}
        {/foreach}
    </table>
{/form}
Tak jsem si zobrazil rozložení do skupin, ale pro změnu ve formuláři nemám tlačítka Add a Submit…
EDIT2:
Asi nejnadějnější pokus je tento:
 			{foreach $form->getComponents() as $sid => $cntrl}
               {if $cntrl instanceof Kdyby\Replicator\Container}
                   {foreach $cntrl->getControls() as $key => $c}
                       <tr>
                            <td>{label $c /}{input $c}</td>
                       </tr>
                   {/foreach}
               {else}
                   <tr>
                       <td>{label $cntrl /}{input $cntrl}</td>
                   </tr>
               {/if}
           {/foreach}
Vykreslí vše krom rozdělení do skupin (addGroup). U této
varianty vím co je z replikátoru a co není. Což potřebuju. Nevíte prosím
jak vyřešit ty skupiny?
Editoval Croc (9. 4. 2017 19:30)

- Croc
 - Člen | 270
 
Tak jsem postoupil malinko dále. U replikátoru jsem schopen vypsat název skupiny:
 {foreach $form->getComponents() as $sid => $cntrl}
            {if $cntrl instanceof Kdyby\Replicator\Container}
                <tr>
                    <td>{$cntrl->getCurrentGroup()->getOption('label')}</td> // vypsání názvu skupiny
                </tr>
                  {foreach $cntrl->getControls() as $key => $c}
                      <tr>
                           <td>{label $c /}{input $c}</td>
                      </tr>
                  {/foreach}
              {else}
                  <tr>
                      <td>{label $cntrl /}{input $cntrl}</td>
                  </tr>
              {/if}
          {/foreach}
Nevíte jak tedy získat název skupiny pro ostatní atributy (které nejsou v replikátoru)? Díky

- Croc
 - Člen | 270
 
Přidávám pro ostatní řešení jak mám udělané řešení já. Jen jsem místo nefunkčního Kdyby/Replicator použil funkční a aktuální WebChemistry/Multiplier:
Latte šablona:
{form itemForm}
    <div class="col-sm-12">
        {snippet itemForm}
            {var $oldGroup = ''}
            {var $form = $control['itemForm']}
            {foreach $form->getComponents() as $sid => $cntrl}
                {if $cntrl instanceof WebChemistry\Forms\Controls\Multiplier}
// vykreslení replicator atributů
                    <div class="col-sm-12">
                        <br>
                        <h3>{$cntrl->getCurrentGroup()->getOption('label')}</h3>
                        <hr>
                    </div>
                    <div class="col-sm-12">
                        {foreach $cntrl->getControls() as $key => $c}
                            {if $c instanceof Nette\Forms\Controls\TextInput || $c instanceof Nette\Forms\Controls\SelectBox || $c instanceof Nette\Forms\Controls\SubmitButton
                            || $c instanceof Nette\Forms\Controls\Checkbox || $c instanceof Nette\Forms\Controls\CheckboxList}
                                {if $c->getName() == 'multiplier_creator'}
                                    <div class="col-sm-12">
                                        <br>
                                {elseif $c->getName() == 'multiplier_remover'}
                                        <div class="col-sm-3">
                                        <br>
                                {else}
                                    <div class="col-sm-3 subject-header-input">
                                {/if}
                                    {label $c /}{input $c}
                                </div>
                                {if $c->getName() == 'multiplier_remover'}
                                    </div>
                                    <div class="col-sm-12">
                                {/if}
                                {if $c->getName() == 'dummy_format'}
                                    </div>
                                    <div class="col-sm-12">
                                {/if}
                            {/if}
                        {/foreach}
                    </div>
                {else}
// vykreslení normálních atributů
                    {var $newGroup = $cntrl->getOption('group')}
                    {if $cntrl instanceof Nette\Forms\Controls\TextInput || $cntrl instanceof Nette\Forms\Controls\SelectBox
                    || $cntrl instanceof Nette\Forms\Controls\SubmitButton || $cntrl instanceof Nette\Forms\Controls\Checkbox
                    || $cntrl instanceof Nette\Forms\Controls\CheckboxList}
                        {if $newGroup != $oldGroup}
                            <div class="col-sm-12">
                                <br>
                                <h3>{$cntrl->getOption('group')}</h3>
                                <hr>
                            </div>
                            {var $oldGroup = $newGroup}
                        {/if}
                        {if $cntrl instanceof Nette\Forms\Controls\CheckboxList}
                            <div class="col-sm-3 neco">
                                {label $cntrl /}{input $cntrl}
                            </div>
                        {else}
                            <div class="col-sm-3 neco-jineho">
                                {label $cntrl /}{input $cntrl}
                            </div>
                        {/if}
                    {/if}
                {/if}
            {/foreach}
        {/snippet}
    </div>
{/form}