Formulářový prvek na čístý text
- alan_ig
- Člen | 11
Dobrý den,
u formuláře se často mění, co může uživatel upravit. Možností je
požít u prvku setDisabled(). Rád bych ale, aby se zobrazil pouze text, tedy
vůbec ne formulářový prvek. Je nějaká možnost, jak nastavit prvku, aby
vypsal jen hodnotu, aniž by se musela upravovat šablona? Omlouvám se, jestli
už je to někde řešeno, hledal jsem, ale nenašel.
Díky
- Filip Procházka
- Moderator | 4668
Nástřel:
$form->addText('name', 'jmeno')->setOption('textOnly', TRUE);
v šabloně
<th>{$form['name']->label}</th>
<td>{if $form['name']->getOption('textOnly')}{$form['name']->value}{else}{$form['name']->control}{/if}</td>
- bazo
- Člen | 620
alan_ig napsal(a):
Doufal jsem, že to půjde i jinak, ale co se dá dělat :)
ved to nie je ziadny problem
<?php
class NullControl extends FormControl
{
/**
* @param string caption
*/
public function __construct($caption = NULL)
{
$this->monitor('Form');
parent::__construct();
$this->control = Html::el('span')->add($caption);
$this->label = Html::el('label');
}
}
?>
mozno sa da zrusit aj ten label
- alan_ig
- Člen | 11
Díky za rady,
vydal jsem se cestou co nastinil HosipLan a jelikož jsem chtěl, aby např.
select box zobrazil vybraný prvek a checkbox ANO|NE, tak jsem potřebné form
controly rozšířil o metodu toText() a zaregistroval jsem extension
do formu.
<?php
class CheckBoxToText extends Nette\Forms\Controls\Checkbox implements IToText {
public function toText(){
return $this->getValue() ? 'ANO' : 'NE';
}
}
?>
<?php
\Nette\Forms\Container::extensionMethod('addCheckBoxToText', function (\Nette\Forms\Container $container, $name, $label = NULL) {
return $container[$name] = new CheckBoxToText($label);
});
?>
a tak pak v šabloně můžu foreach cyklem zborazit vše :)
Akorát nrvím, jestli to není moc prasácký, proto uvítám kritiku :)
- Filip Procházka
- Moderator | 4668
Je to ok. Ale mohl bys to ještě vylepšit, kdyby jsi překryl
getControl
, nemusel by jsi pak mít podmínku v šabloně, ale
mohl ji dát rovnou do téhle metody
public function getControl()
{
if (!$this->getOption('onlyText')) {
return parent::getControl()
}
return Html::el()->setText($this->getValue()); // třeba...
}