Ako na zmenu atribútu class v template?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- RichardT
 - Člen | 43
 
Zdravím,
potrebujem v template zmeniť atribú class prvku.
Moja template vychádza z https://forum.nette.org/…0-radku-kodu?… ciže
<fieldset n:foreach="$form->groups as $group" n:if="$group->controls && $group->getOption('visual')" n:block="#group">
...
	<table n:block="#controls">
		<tr{attr class('required', $control->getOption('required'))} n:foreach="$group->controls as $control" n:if="!$control->getOption('rendered')" n:block="#pair">
			<th n:block="#label">{if $control instanceof Button || $control instanceof Checkbox} {else}{!$control->label}{/if}</th>
			<td n:block="#control">{!$control->control}{if $control instanceof Checkbox}{!$control->label}{/if}</td>
		</tr>
	</table>
...
</fieldset>
Pokúsm sa pristúpiť ku controlu elementu pomocou getControl()
no v tomto momente dôjde k jeho naklonovaniu (https://api.nette.org/…rol.php.html#386)
a teda zmeny sa na zobrazenom prvku vôbec neprejavia.
Príklad:
$x = $control->getControl();
$x->class('mojaTrieda');
Debug::dump($control->getControl());
Debug::dump($x);
Výstup:
object(Html) (4) {
   "name" private => string(5) "input"
   "isEmpty" private => bool(TRUE)
   "attrs" => array(8) {
      "type" => string(4) "text"
      "size" => NULL
      "maxlength" => NULL
      "class" => array(1) {
         "text" => bool(TRUE)
      }
      "name" => string(8) "username"
      "disabled" => bool(TRUE)
      "id" => string(25) "frmmyProfileForm-username"
      "value" => string(4) "demo"
   }
   "children" protected => array(0)
}
object(Html) (4) {
   "name" private => string(5) "input"
   "isEmpty" private => bool(TRUE)
   "attrs" => array(8) {
      "type" => string(4) "text"
      "size" => NULL
      "maxlength" => NULL
      "class" => string(10) "mojaTrieda"
      "name" => string(8) "username"
      "disabled" => bool(TRUE)
      "id" => string(25) "frmmyProfileForm-username"
      "value" => string(4) "demo"
   }
   "children" protected => array(0)
}
Neviete ako to spraviť tak, aby sa to fungovalo? :)
Ďakuejm!