gestione dinamica dei combo

Ciao a tutti, ho due combo che visualizzano elenco stati ed elenco città.... io vorrei applicare a questi una gestione tramite jquery (ajax) con un posizionamento corretto del codice (intendo ben diviso tra form, controller e view)

attualmente nel form ho

    $state = new Zend_Form_Element_Select('state');

            $state->setLabel('stato')

                    ->addFilter('StripTags')

                    ->addFilter('StringTrim')

                    ->addValidator('NotEmpty')

                    ->setValue('108'); //Valore di default

          $state->setAttrib('style', 'width:150px');   

            $states = new Application_Model_DbTable_State();

            $state->addMultiOption('', 'Selezionare uno stato');

            foreach ($states->findForSelect() as $c) {

                $state->addMultiOption($c->id, $c->description);

            }   

            $city = new Zend_Form_Element_Select('city');

            $city->setLabel('provincia')

                    ->addFilter('StripTags')

                    ->addFilter('StringTrim')

                    ->addValidator('NotEmpty');

          $city->setAttrib('style', 'width:150px');

          $cities = new Application_Model_DbTable_City();

            foreach ($cities->findForSelect() as $c) {

                $city->addMultiOption($c->id, $c->description);

            }       

Io vorrei fare in modo che cambiando un valore nello stato, autoamticamente venga "fillato" il combo delle city con i valori corretti .... il tutto in ajax (quindi ricaricando solo il combo e non tutta la pagina)

Grazie mille

inviato 6 anni fa
il_dandi
X 0 X

Per prima cosa devi fare in modo che il tutto funzioni anche senza javascript.

Dopo aver implementato tutto, puoi aggiungere degli eventi javascript (tramite jQuery sarebbe meglio, è molto più facile che farlo a mano) che richiamano delle azioni, le quali dovrebbero restituire dei json con i dati relativi (per esempio le città relative a uno stato). A questo punto, sempre nel javascript, puoi modificare il DOM delle altre combo, usando i dati che hai ottenuto.

È più facile a farsi che a dirsi.  :)

risposto 6 anni fa
Massimiliano Arione
X 0 X

Per gestire le richieste Ajax nel controller potresti procedere in questo modo:

function indexAction()
{
   if ($this->getRequest()->isXmlHttpRequest()) {
      $array = array('uno','due','tre');
      $this->_helper->json($array);
   }
}

Alternativamente puoi considerare l'utilizzo di ContextSwitch o AjaxContext:

http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelpers.contextswitch

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Grazie a tutti per i suggerimenti, non ho capito però come applicare quanto indicato alla mia soluzione.

Io devo "fillare" (nel form) i 2 combo?? oppure solo quello degli stati in quando le city verranno fillati di conseguenza??

non credo sia corretto riempire i due select già nel form ... però la frase

<< devi fare in modo che tutto funzioni senza js>> mi ha disorientato

grazie a tutti

risposto 6 anni fa
il_dandi
X 0 X

garak ti ha suggerito, giustamente, di realizzare prima un sistema di combo che funzioni anche con javascript disabilitato

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Ok! e questo l'ho fatto, ho modificato la view fillando i due select

ma ora?? :((

risposto 6 anni fa
il_dandi
X 0 X

scrivi il codice javascript per richiedere i valodi delle combo e per caricarle dinamicamente  :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

A livello teorico so che devo fare il fill tramite JS (ovviamente), era infatti questa la mia domanda.

Quello che non so come fare è appunto l'implemtanzione di questo :(

Grazie

risposto 6 anni fa
il_dandi
X 0 X

Nessun aiutino?? :(((

risposto 6 anni fa
il_dandi
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda