připojení html k formuláři

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

Ahoj,
omlouvám se za lamerský dotaz, ale mám problém s jednoduchou věcí, a to připojení html fragmentu do formuláře. Potřebuju v rámci formu zobrazit licenční ujednání a pod tím checkbox, poradí mi někdo?
Frankie

Etch
Člen | 403
+
0
-

Myslíš něco jako :

$form = new AppForm();
$form->addCheckbox('licence', Html::el('div')->setHtml('Bla bla <a href="'.$this->link('Licence:').'">odkaz<a/>'));
$form->addSubmit('send', 'Send');
$form->onSubmit[] = array('send', 'formSend');

nebo sem zcela vedle?

Editoval Etch (22. 8. 2009 8:18)

kravčo
Člen | 721
+
0
-

Pokiaľ tam potrebuješ celý text, asi budeš musieť formulár vykresliť ručne…

$form = new AppForm;
$form->addCheckbox('i_agree', 'Súhlasím')
    ->addRule(Form::FILLED, 'Musíte súhlasiť s licenčnými podmienkami.');
$form->addSubmit('continue', 'Pokračovať')
    ->onClick[] = array($this/*prezenter*/, 'onAgreed');
{control $form begin}

{assign errors => $form->errors}
<ul class="error" n:if="$errors" n:block="#errors">
        <li n:foreach="$errors as $error">{$error}</li>
</ul>

<div>
	<strong>Licencia:</strong><br />
	{$licencia}
</div>
<div>
	{$form['i_agree']->control} {$form['i_agree']->label}
</div>
<div>
	{$form['continue']->control}
</div>

{control $form end}
Honza Marek
Člen | 1664
+
0
-

Kdybys to chtěl ošidit, tak můžeš nad checkbox prostě vložit textareu. Nebo udělat skupinu, která může mít vlastní popisek, možná jde i objekt Nette\Html.

//cca
$form->addGroup("Licence")
	->setOption("description", "Dílo smíte používat výhradně pod naším přísným dohledem, ...");
$form->addCheckbox("license", "Souhlasím s licencí");
sitnarf
Člen | 27
+
0
-

Díky, nakonec jsem použil tu texareu… Možná by neuškodilo, kdyby to třídy Form přibylo něco jako addHTML.
Frankie

theo
Člen | 56
+
0
-

sitnarf napsal(a):

Díky, nakonec jsem použil tu texareu… Možná by neuškodilo, kdyby to třídy Form přibylo něco jako addHTML.
Frankie

Souhlasím a přimlouvám se za takovou možnost, značně by to zjednodušilo život.
Potřebuji často ve formuláři zobrazit jen nějakou statickou informaci (například o poslední modifikaci článku) a musím to dávat někam mimo formulář. Stejně tak odkaz na soubor ke stažení či informace o něm v administraci, a tak by se dalo pokračovat…

Michalek
Člen | 203
+
0
-

Taky jsem pro, chtěl bych globálně pod formulář přidávat hlášku „Povinné položky jsou označeny hvězdičkou“ a přesně tohle mi chybí :(

Honza Kuchař
Člen | 1661
+
0
-

Mno ono jakoby návrhově to tam opravdu nepatří. Ale můžu vám něco takového napsat, je to otázka opravdu minutky. Má to jednu vadu na kráse, bude se Vám potom ve getValues() zobrazovat něco ⇒ null (název toho objektu s tím textem).

jasir
Člen | 746
+
0
-

Mohlo by se to udělat třeba vytvořením nového prvku, který se vykreslí ve formuláři.
Problém s getValues() se vyřeší disabled===TRUE.
Něco takového:

<?php
class Description extends FormControl {

	private $description;

	public function __construct($description = NULL, $caption = NULL) {
		if ($description !== NULL) {
			$this->setDescription($description);
		}
		parent::__construct($caption);
	}

	public function setDescription($description) {
		if ($description instanceof Html) {
			$this->description = $description;
		} else {
			$this->description = Html::el('div')->setHtml($description);
		}
		return $this;
	}

	public function getDescription() {
		return $this->description;
	}

	public function setDisabled($value = TRUE) {
		/* --- Eat value --- */
	}

	public function setValue($value) {
		/* --- Eat value --- */
	}

	public function isDisabled() {
		return TRUE;
	}

	public function getControl() {
		return $this->description;
	}
}
?>

A při tvorbě formuláře pak:

<?php
protected function createComponentTestForm($name) {
	$form = new AppForm($this, $name);
	$form->addText('textik1','test 1:', 40);
	$form->addText('textik2','test 2:', 40);

	//label je nepoviný, description je string nebo instance Html
	$form['desc1'] = new Description('My description', 'label');

	$form->addSubmit('submit1','OK');
	$form->onSubmit[] = array($this, 'onSubmitForm');
}
?>

Je to nástřel, ale funguje…

kravčo
Člen | 721
+
0
-

Podstatne správnejším riešením je vlastný renderer – ten pridá popis o povinných položkách a hviezdičke automaticky a nešpatí logiku formulára.

jasir
Člen | 746
+
0
-

Asi ano.

Michalek
Člen | 203
+
0
-

S vlastním rendererem si ještě pohraju a asi to bude finální řešení, ale (velmi hnusná obezlička, já vím, já vím) zafunguje i tohle přidáno do BaseAppForm:

$form->addGroup()
 ->setOption('description', 'Položky označené hvězdičkou * jsou povinné.')
 ->setOption('container','');