manuální vykreslení: u labelu chybí ‚class=„required“‘
- xlilien
- Člen | 27
Ahoj, předem se omlouvám, že to píšu dvakrát, ale chtěl jsem zkusit, jestli na českém fóru nebude někdo znát odpověď.
Když vykresluju formulář ručně pomocí
{form signInForm}
{label username /} {input username}
{/form}
tak ve vygenerovaném html kódu u labelu chybí class=„required“ – označení povinné položky, kterou přidávám pomocí ->setRequired(). Když vykreslím formulář pomocí standardního renderu
{control signInForm}
tak ten samý formulář u labelu již class=„required“ obsahuje. Setkali jste se s tím? Jak zajistit, aby i při manuálním vykreslování formuláře byly generovány tyto css třídy?
Samozřejmě by šlo vykreslovat pomocí
{label username class => 'required'}
ale to mi přijde hodně neobratné – musel bych hlídat na dvou místech, jestli se jedná o povinnou položku.
Předem díky za návrhy řešení.
- petr.pavel
- Člen | 535
Mě taky přijde legitimní chtít, aby required bylo (i) u label. Jak jinak chcete udělat třeba hvězdičku za popiskem, nebo celé tučným písmem.
Já používám vlastní makro, které přetěžuje to původní:
<?php
/**
* {label ...} and optionally {/label}
* With css class 'required'
*/
public function macroLabel(NMacroNode $node, NPhpWriter $writer) {
$cmd = '
$_input = is_object(%node.word) ? %node.word : $_form[%node.word];
$attributes = %node.array;
if ($_input->required) {
$attributes += array("class" => "required");
}
if ($_label = $_input->getLabel())
echo $_label->addAttributes($attributes)'; // ->startTag() may be appended to the string so don't end with } or ;
if ($node->isEmpty = (substr($node->args, -1) === '/')) { // {label xyz /}
$node->setArgs(substr($node->args, 0, -1));
return $writer->write($cmd);
} else { // {label xyz} abc {/label}
return $writer->write($cmd . '->startTag()');
}
}
?>
- David Matějka
- Moderator | 6445
snad jen jeste doplnim, ze trida required je pri vykresleni pres {control} nejen u inputu, jak pise Grelek, ale i u „pair“, ktery obaluje label a input. a deje se tak diky DefaultFormRenderer, ktery se pri manualnim vykresleni samozrejme nepouzije
- xlilien
- Člen | 27
petr.pavel napsal(a):
Mě taky přijde legitimní chtít, aby required bylo (i) u label. Jak jinak chcete udělat třeba hvězdičku za popiskem, nebo celé tučným písmem.
Já používám vlastní makro, které přetěžuje to původní:
<?php /** * {label ...} and optionally {/label} * With css class 'required' */ public function macroLabel(NMacroNode $node, NPhpWriter $writer) { $cmd = ' $_input = is_object(%node.word) ? %node.word : $_form[%node.word]; $attributes = %node.array; if ($_input->required) { $attributes += array("class" => "required"); } if ($_label = $_input->getLabel()) echo $_label->addAttributes($attributes)'; // ->startTag() may be appended to the string so don't end with } or ; if ($node->isEmpty = (substr($node->args, -1) === '/')) { // {label xyz /} $node->setArgs(substr($node->args, 0, -1)); return $writer->write($cmd); } else { // {label xyz} abc {/label} return $writer->write($cmd . '->startTag()'); } } ?>
Díky, tohle je přesně ono, pomohlo mi to!
Grelek napsal(a):
Ehm,
required
se dává na input, ne na label.
Jak píše i @matej21, class required dává default renderer na label a tr, input nemá class required ale samostatný HTML5 atribut required.