Nette Framework – Form → select
- Takeshi
- Člen | 596
Zdravim vsetkych,
potreboval by som poradit ohladne nastavenia A LINKu na select … teda mam
formular
<?php
$form = new Form;
$form->addSelect('language','Language',array(
'sk' => 'Slovak',
'en' => 'English',
'fn' => 'Finnish'
));
$form['language']->setDefaultValue('en');
return $form;
?>
… teda jednoducho kazdemu Slovak,English,Finnish nastavit <a href=""></a>
Dik za odpoved
- Vojtěch Dobeš
- Gold Partner | 1316
<select>
a <a>
jsou naprosto
neslučitelné elementy. Čeho přesně se snažíš dosáhnout?
- Vojtěch Dobeš
- Gold Partner | 1316
Do selectu přece žádné HTML narvat nemůžeš… v položce nikdy nebudeš mít odkaz.
- mkoubik
- Člen | 728
Pokud tuším správně čeho se snažíš dosáhnout, tak si udělej formulář:
protected function createComponentLanguageForm()
{
$form = new Form();
$form->addSelect('language', 'Language', array(
'sk' => 'Slovak',
'en' => 'English',
'fi' => 'Finnish',
));
$form->onSuccess[] = $this->changeLanguage;
}
public function changeLanguage(Form $form)
{
$language = $form['language']->getValue(); // 'sk'
$this->redirect('this', array('language' => $language)); // například
}
A pak v javascriptu nějak zařiď, aby se ten formulář odeslal když se
změní hodnota selectu.
Edit: $language
bude asi typicky persistentní parametr v
BasePresenter
u.
Editoval mkoubik (11. 12. 2012 14:47)
- mildabre
- Člen | 62
To zadání chápu tak, že chceš mít na webu rolovací dropdown prvek, kde by byly na výběr odkazy na stránky na webu – třeba jazykové mutace nebo obecně nějaké stránky.
Jsou to úplně základní znalosti stavby webu (HTML a Javascript) jak přejít na jinou stránku:
- buďto HTML tagem <a href=„url“>
- nebo Javascriptem document.location.href = „url“;
Na webech se někdy používá prvek formuláře SELECT pro výběr stránky nebo filtru a čertvíčehoještě – stačí vybrat jazyk a automaticky se zapne – to se dělá právě tím Javascriptem pověšeným na událost onchange (<select onchange=„getUrl()“>…) kde getUrl() je funkce Javascriptu která si zjistí value selectu a podle toho přesměruje kam je libo.
Já bych to ale takhle nedělal – použil bych normální odkazy <a …> nastylované pomocí css do dynamicky rolovacího dropdown menu, to už je ale téma složitější a už ani nespadá na Nette fórum – je to taková obecná webařina.
@mkoubik navrhuje vybranou hodnotu selectu odeslat na ke zpracování na server a až potom přesměrovat – i to je možné, je to takové více Nettistické, ale je tam o jeden krok navíc.
Jak tohle řeší ostatní, napište jak na to jít co nejlépe.
Editoval mildabre (11. 12. 2012 20:31)
- Takeshi
- Člen | 596
Odosiela mi formular pri zmene hodnoty selectu:
<?php
public function createComponentLanguage() {
$form = new Form;
$form->addSelect('language','Language',array(
'sk' => 'Slovak',
'en' => 'English',
'fn' => 'Finnish'
))
->setPrompt('Choose language')
->getControlPrototype()->onchange("submit();");
$form->onSuccess[] = callback($this, 'changeLanguage');
$form->getElementPrototype()->name = 'Lan';
return $form;
}
public function changeLanguage(Form $form){
$language = $form['language']->getValue();
$this->redirect('this',array('language' => $language));
}
?>
Tak vdaka vsetkym, ktori mi poradili :-)