Formulářový prvek na čístý text

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

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

bazo
Člen | 620
+
0
-

na toto by som si spravil vlastny prvok

alan_ig
Člen | 11
+
0
-

Doufal jsem, že to půjde i jinak, ale co se dá dělat :)

Filip Procházka
Moderator | 4668
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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...
}
alan_ig
Člen | 11
+
0
-

Díky, funguje to, jak bych chtěl, takže super :)