Renderer a vkládání class do obalovacího divu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Rudolf247
Člen | 38
+
0
-

Zdravím, jsem v nette úplný nováček a prolezl jsem snad všechny diskuse, ale nemohu najít odpověď na můj problém.
Používám Bootstrap renderer konkrétně „Bs3FormRenderer“ vše bez problému chodí, ale potřebuji výsledný formulář trošku „nastylovat“ což by nebyl takový problém, ale spíše mi jde o vložení class do jednoho konkrétního divu. Zde je komponenta na vytvoření formuláře i s renderem:

protected function createComponentComplexTaskForm()
{

    $form = new Form($this, 'complexTaskForm');
    $form->setRenderer(new Bs3FormRenderer());
    $renderer = $form->getRenderer();

    $form->addGroup("Zadání požadavku")
        ->setOption('container','fieldset "class=col-md-4');
    $form->addText('subject', 'Předmět')
        ->setRequired('Vyplňte prosím toto pole');
    $form->addMultiSelect('involved_employee', 'Zapojení zaměstnanci')
        ->setAttribute('class', 'employees')
        ->setRequired('Vyplňte prosím toto pole');
    $form->addMultiSelect('involved_department', 'Zapojené oddělení')
        ->setAttribute('class', 'departments')
        ->setRequired('Vyplňte prosím toto pole');
    $form->addRadioList('priority', 'Priorita', [
        'nízká', 'střední', 'vysoká',])
        ->getSeparatorPrototype()->setName(null);
    $form->addText('price', 'Cena úkonu')
        ->setAttribute('placeholder', '1000 Kč');
    $form->addTextArea('task', 'Zadání')
        ->setAttribute('placeholder', '15000 znaků maximum');
    $form->addGroup("Časový plán požadavku")
        ->setOption('container','fieldset "class=col-md-4');
    $form->addText('fromSolution', "Datum řešení")
         ->setAttribute('id', 'fromSolution');
    $form->addText('toSolution', "Datum řešení")
        ->setAttribute('id', 'toSolution');

    $form->addSubmit('next', 'Další')
        ->setAttribute('class', 'pull-right');

    $renderer->wrappers['container']['fieldset'] = 'div class=col-md-4';

}

Zde je výsledek (vložím sem jen část kódu se kterou potřebuji pracovat):

<fieldset class="col-md-4">
<legend>Časový plán požadavku</legend>


<div class="form-group">
	<div class="col-sm-3 control-label"><label for="fromSolution">Datum řešení</label></div>
	<div class="col-sm-9"><input type="text" name="fromSolution" id="fromSolution" class="form-control text"></div>
</div>

<div class="form-group">
	<div class="col-sm-3 control-label"><label for="toSolution">Datum řešení</label></div>
	<div class="col-sm-9"><input type="text" name="toSolution" id="toSolution" class="form-control text"></div>
</div>
</fieldset>

Potřeboval bych aby <div class=„form-group“> měla ještě class „col-md-6“, ale jen u těchto dvou divu takže $renderer->wrappers[‚pair‘][‚container‘] = „form-group col-md-6“; mi moc nepomůže.

Poradí mi s tím někdo? Už jsem zkusil snad všechno… Děkuji

Šaman
Člen | 2666
+
+1
-

V tomhle případě doporučuji ruční renderování. Renderer je fajn, dokud není potřeba upravovat vzhled konkrétních formulářů.

Rudolf247
Člen | 38
+
0
-

Děkuji za odpověď. No tak mi asi nic jiného nezbývá. Ještě taková blbá otázka asi nejde udělat to že bych tyhle dva divy vytvořil ručně a potom je jen vložil do toho renderu, že?

Rudolf247
Člen | 38
+
0
-

To přidá další <fieldset> změní ho to na <div> který má class form-group a col-md-6… Ale děkuji za odpověď.

Editoval Rudolf247 (27. 4. 2016 19:46)

Altimit
Člen | 82
+
0
-

Co vím tak toto nejde (aspoň jsem na to nepřišel) :D
ale normálně bych se nebál ručního generování pomocí n:name=… :) tam si nastavíš co chceš (já tak mám 2 weby a formuláře jsou pro mně „lehčí“ protože si můžu udělat co chci.

Rudolf247
Člen | 38
+
0
-

Dobře tak je udělám ručně, já jen že pár formulářů už tam mám hotových a řešil jsem je tímto automatickým renderem. Ale když budu mít jeden ručně a ostatní automaticky tak to nevadí ne?

Rudolf247
Člen | 38
+
0
-

Tak jsem to vyřešil sám :D

$form->addText('toSolution', "Datum řešení")
    ->setAttribute('id', 'toSolution')
    ->setOption('class', 'col-md-6');
CZechBoY
Člen | 3608
+
0
-

To ale nastavíš třídu/id jen pro ten input, ne?

Rudolf247
Člen | 38
+
0
-

Právě že já to potřeboval pro celej ten div. :) Kdybych to dal jen na input tak se mi zmenší pouze ten input já potřeboval ten div ve kterém je label i input, ale už to mám pořešený ;)