připojení html k formuláři
- Etch
- Člen | 403
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
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
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í");
- theo
- Člen | 57
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…
- Honza Kuchař
- Člen | 1662
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
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…
- Michalek
- Člen | 211
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','');