Univerzální komponenta, zvolil jsem správný postup?

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

Ahoj,

rád bych měl na různých stránkách webu (v různých presenterech) jeden stejný kontaktní formulář s nějakými dodatečnými informacemi. Rozhodl jsem se tedy pro vytvoření komponenty jako potomka třídy Control, do které potom vkládám formulář, tzn. instanci třídy AppForm.

Po odeslání by měl formulář/komponenta umět zaslat nějaké informace na zadanou emailovou adresu. Kód komponenty vypadá následovně:

<?php
class ContactInfoControl extends Control
{

	protected function createComponentContactForm()
	{
		$form = new AppForm;
		$form->addText('username', 'Jméno:')->addRule(Form::FILLED, 'Vyplňte vaše jméno.');
		$form->addTextArea('message', 'Zpráva:');
		$form->addSubmit('send', 'Odeslat');

		$form->onSubmit[] = callback($this, 'contactFormSubmitted');

		return $form;

	}

	public function contactFormSubmitted($form)
	{
		// odesle mail ...
	}

	public function render()
	{
		$template = $this->template;
		$template->setFile(dirname(__FILE__) . '/ContactInfoControl.phtml');
		$template->render();
	}
}
?>

Do šablony komponenty potom vkládám formulář, pomocí {control contactInfo}.

Rád bych ale věděl, zda-li jsem zvolil správný postup. Napadlo mne, že pokud budu chtít upravit styl rozmístění prvků formuláře, že stejně budu muset nějak k formuláři typu AppForm nějak připojit šablonu. Potom se ale nabízí otázka, zda-li jsem neměl komponentu ContactForm rovnou podědit od třídy AppForm k té se snažit připojit šablonu a v ní kód modifikovat.

U stávajícího řešení se mi totiž moc nelíbí to, že mám komponentu s formulářem a nějakým textem a text mohu upravit v šabloně komponenty a samotný formulář budu muset upravovat jinde, přitom se jedná o logický celek.

Jak tedy řešíte podobrné situace vy? Také takto do komponent vkládáte formuláře nebo komponentu vytváříte jako potomka nějaké formulářové třídy kterého potom modifikujete?

Mám ještě druhý dotaz a to, zda-li vůbec existuje způsob, kterým by se dala k formulářové třídě (AppForm/Form) připojit klasická html šablona a v ní by bylo možné libovolně stylovat formulářová pole, popisující texty, bez ztráty různých kontrolních a bezpečnostních funkcionalit?

Šablonu formuláře bych si představoval nějak tahle:

<div>
	<p>Dlouhý vysvětlující text...</p>
	{input name}
	<img alt="Třeba obrázek" />
	{input message}

	{input submit}
</div>

Díky za info.

vkuzel
Člen | 15
+
0
-

Tak na druhou utázku bylo již odpovězeno na fóru, zde: https://forum.nette.org/…vat-formular