Přidání vlastního textu(odkaz) do form

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

Dobrý den,
chtěl bych se zeptat, jak přidat vlastní text do formu? Například hypertextový odkaz pod přihlašovací tlačítko.

protected function createComponentSignInForm()
	{
		$form = new UI\Form;
		$form->addText('username', 'Už. jméno:')
			->setRequired('Prosím zadejte uživatelské jméno.');

		$form->addPassword('password', 'Heslo:')
			->setRequired('Prosím zadejte heslo.');

		$form->addCheckbox('remember', 'Zapamatovat na tomto počítači.');

		$form->addSubmit('send', 'Přihlásit');

		$form->onSuccess[] = callback($this, 'signInFormSubmitted');
		return $form;
	}

Editoval Jakolcz (11. 3. 2012 21:42)

Tomáš Kolinger
Člen | 136
+
0
-

Musíš upravit renderer a nebo použít manuální vykreslování – https://doc.nette.org/cs/forms#…

llook
Člen | 407
+
0
-

A nebo si přidat vlastní control:

class MyLinkControl extends \Nette\Forms\Controls\BaseControl
{
	public function getControl()
	{
		return \Nette\Utils\Html::el('a', 'odkaz')->href('url');
	}

}

$form = new Form;
$form->addText('...');
$form['a'] = new MyLinkControl;
$form->addSubmit('submit');
Tomáš Votruba
Moderator | 1114
+
0
-

Nejjednodušší je přidat html element do skupiny (bez ohledu na to, že přidat odkaz pod přihlašovací tlačítko, resp. konec formuláře, můžeš klasicky pod formulář v šabloně).

// use Nette\Utils\Html;

$myElement = Html::el("a", "link text")->href("somewhere")->class("positionMe");

$form = new Form;
$form->addGroup();
// some inputs
$form->addGroup()->setOption("description", $myElement);
// other inputs

EDIT: Oprava.

Editoval Schmutzka (12. 3. 2012 18:41)

Jakolcz
Člen | 9
+
0
-

V Nette jsem opravdu začátečník a nějak mi ten kód nefunguje.

protected function createComponentSignInForm()
	{
    $myElement = Nette\Utils\Html::el("a", "odkaz")->href("http://localhost");
		$form = new UI\Form;

		$form->addText('username', 'Už. jméno:')
			->setRequired('Prosím zadejte uživatelské jméno.');

		$form->addPassword('password', 'Heslo:')
			->setRequired('Prosím zadejte heslo.');

		$form->addCheckbox('remember', 'Zapamatovat na tomto počítači.');

		$form->addSubmit('send', 'Přihlásit');

    $form->addGroup()->setOption("description", $myElement);
    $form->setCurrentGroup(NULL);

		$form->onSuccess[] = callback($this, 'signInFormSubmitted');

		return $form;
	}

Pod formulář v šabloně se mi link vkládat nechce, kvůli rozhozenému formátování.

Editoval Jakolcz (12. 3. 2012 17:32)

Tomáš Votruba
Moderator | 1114
+
0
-

Jakolcz napsal(a):

Opraveno a vyzkoušeno. (Třídou si pak můžeš vypozicovat prvek dle libosti.)

Jakolcz
Člen | 9
+
0
-

Tak po upravení kódu se link pořád nevypisuje, i když přes

echo $form->groups[""]->options["description"];

se vypsat dá

Tomáš Votruba
Moderator | 1114
+
0
-

Jakolcz napsal(a):

Tak po upravení kódu se link pořád nevypisuje, i když přes

echo $form->groups[""]->options["description"];

se vypsat dá

Pokud přidáš skupinu na konec formuláře, musíš jí přidat i nějaké prvky, jinak se nevypíše.
Dalo by se to obejít:

$form->addGroup()->setOption("description", $myElement);
$form->addHidden("test");

$form->onSuccess[] = callback($this, 'signInFormSubmitted');
return $form;

ale přesto mi přijde smysluplnější výše uvedený postup aplikovat jen na html MEZI prvky: