Univerzální komponenta, zvolil jsem správný postup?
- vkuzel
- Člen | 15
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
Tak na druhou utázku bylo již odpovězeno na fóru, zde: https://forum.nette.org/…vat-formular