Nette Framework – Form → select

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

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
+
0
-

<select> a <a> jsou naprosto neslučitelné elementy. Čeho přesně se snažíš dosáhnout?

Takeshi
Člen | 596
+
0
-

No zatial to planujem tak,ze ked kliknem napriklad na Finnish, tak ma odkaze na stranku, ktora bude po finsky.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

To je super… ale jak to souvisí se selectem :) ?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Do selectu přece žádné HTML narvat nemůžeš… v položce nikdy nebudeš mít odkaz.

mkoubik
Člen | 728
+
0
-

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 BasePresenteru.

Editoval mkoubik (11. 12. 2012 14:47)

mildabre
Člen | 62
+
0
-

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
+
0
-

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 :-)