Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'essaye de configurer un formulaire avec une liste déroulante contenant les codes postaux de ma table Ville.
// CODE POSTAL $codepostal = new Application_Model_DbTable_Villes(); $select = $codepostal->select() ->from('villes'); $result = $codepostal->fetchRow($select); $this->addElement('select', 'codepostal', array( 'required' => false, 'label' => 'Code postal:', 'multiOptions' => array($result) ));
Mais ma liste déroulante reste désespérant vide...
J’écume le net depuis ce matin et je ne trouve pas d'indices...
Une idée?
j'ai un warning :
Warning: htmlspecialchars() expects parameter 1 to be string, object given in ...\library\Zend\View\Abstract.php on line 897
Merci.
Dernière modification par bandit_rouge (13-04-2011 21:37:23)
Hors ligne
ton pb ne vient pas de cette portion de code
c'est dans la vue que tu as un pb
c'est a dire dans ton phtml
Hors ligne
je ne suis pas sur que le problème soit lié à la vue:
En faisant cette petite modif
// CODE POSTAL $codepostal = new Application_Model_DbTable_Villes(); //$codepostalList = $codepostal->getVilles(); $select = $codepostal->select() ->from($codepostal, 'nom'); $result = $codepostal->fetchRow($select)->toArray(); $this->addElement('select', 'codepostal', array( 'required' => false, 'label' => 'Code postal:', 'multiOptions' => array($result) ));
j'ai dans ma liste UN résultat: le première tuple de ma table...
Si je fais un fetchAll j'ai autant de warning
Warning: htmlspecialchars() expects parameter 1 to be string, array given in ...\library\Zend\View\Abstract.php on line 897
que de tuples dans ma table et ma liste est vide...
Je sens que je chauffe!
Dernière modification par bandit_rouge (14-04-2011 13:58:35)
Hors ligne
bandit_rouge a écrit:
je ne suis pas sur que le problème soit lié à la vue:
En faisant cette petite modifCode:
// CODE POSTAL $codepostal = new Application_Model_DbTable_Villes(); //$codepostalList = $codepostal->getVilles(); $select = $codepostal->select() ->from($codepostal, 'nom'); $result = $codepostal->fetchRow($select)->toArray(); $this->addElement('select', 'codepostal', array( 'required' => false, 'label' => 'Code postal:', 'multiOptions' => array($result) ));j'ai dans ma liste UN résultat: le première tuple de ma table...
Si je fais un fetchAll j'ai autant de warning
Warning: htmlspecialchars() expects parameter 1 to be string, array given in C:\wamp\www\50knts\library\Zend\View\Abstract.php on line 897
que de tuples dans ma table et ma liste est vide...
Je sens que je chauffe!
Bonjour;
Merci de nous fournir la structure de votre table. La source n'est pas une base de données mais avez-vous lu ce thread ? http://www.z-f.fr/forum/viewtopic.php?id=6386
Dernière modification par nuxwin (14-04-2011 14:11:56)
Hors ligne
Edit:
Je ne connais pas la structure de votre table mais en partant du principe qu'elle contient deux colonnes (name et code)
Table villes
[lang=sql] CREATE TABLE IF NOT EXISTS `villes` ( `name` varchar(150) collate utf8_unicode_ci NOT NULL, `code` int(11) unsigned NOT NULL, PRIMARY KEY (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ; INSERT INTO `villes` (`name`, `code`) VALUES ('Caen', '14000'), ('Deauville', '14800'), ('Paris', '75000');
Application/Models/DbTable/Villes.php
[lang=php] class Application_Model_DbTable_Villes extends Zend_Db_Table_Abstract { /** * Database table to operate on * * @var string */ protected $_name = 'villes'; /** * Primary key * * @var string */ protected $_primary = 'name'; }
Element select
[lang=php] $model = new Application_Model_DbTable_Villes(); $rows = $model->fetchAll()->toArray(); $this->addElement('select', 'codepostal', array( 'required' => false, 'label' => 'Code postal:' )); $codePostalElement = $this->getElement('codepostal'); foreach ($rows as $row) { $codePostalElement->addMultiOption($row->code, $row->name); }
Note: Il ne s'agit que d'un exemple.
Dernière modification par nuxwin (14-04-2011 14:52:09)
Hors ligne
J'ai trouvé encore plus simple
// CODE POSTAL $villedb = new Application_Model_DbTable_Villes(); $this->addElement('select', 'codepostal', array( 'required' => false, 'label' => 'Code postal:', )); $codePostalElement = $this->getElement('codepostal'); foreach ($villedb->fetchAll() as $row) { $codePostalElement->addMultiOption($row->id, $row->cp); }
Mais le temps de chargement est trop long....faut que je creuse pour trouver une autre solution, le but étant de faire 2 listes déroulantes CodePostal et Ville, avec la/les ville(s) pré-sélectionnée(s) après la saisie du CP.
Une idée?
Hors ligne
Re ;
Effectivement, l'idée de proposer deux listes, l'une contenant tous les codes postaux et l'autre les villes me semble pas être très judicieux en terme de performance, surtout si vous n'utilisez pas de cache et quand bien même.... Je ne sais pas si vous comptiez lister toutes les villes de France et code postaux associés mais si oui, c'est une fausse bonne idée.
Je pense que le plus simple et de proposer à l'utilisateur deux champs de type text (ville et code postal) lesquels seront validés lors de la soumission du formulaire.
Vous pouvez également ajaxiser un peu la chose en faisant en sorte que lorsque l'utilisateur entre le code postal dans le champs, une requête vers le serveur soit effectuée en amont afin de récupérer le nom de la ville et remplir le champs associé automatiquement. Cela peut aussi être implémenté dans le sens inverse. Il s'agit d'une forme d'auto-complétion. Pensez aussi à l'auto-suggestion qui peut être un bon complément.
Voir ici pour un exemple concret:
http://www.geonames.org/export/ajax-pos … ete-2.html
Cordialement ;
Dernière modification par nuxwin (16-04-2011 06:41:38)
Hors ligne
Merci pour cette piste de recherche.
Je vais étudier cela.
Hors ligne
Pages: 1