Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour, je voudrais afficher dans une liste/menu déroulante tous les enregistrements (de la colonne cat_name) de la table category de ma base de donnée pour que l'user sélectionne une catégorie.
Voila la table : category(cat_id, cat_name);
Comment on fait le lien avec la BDD et comment on affecte les valeurs retournées à une liste déroulante?
Merci de vouloir m'aider
class Form_Product extends Zend_Form { public function __construct($options = null) { parent::__construct($options); $this->setName('product'); $prod_id = new Zend_Form_Element_Hidden('prod_id'); $prod_name = new Zend_Form_Element_Text('prod_name'); $prod_name->setLabel('Product name') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); //ici je voudrais afficher le menu déroulant avec les éléments issus d'une requête $submit = new Zend_Form_Element_Submit('submit'); $submit->setAttrib('prod_id', 'submitbutton'); $this->addElements(array($prod_name, $cat_name, $submit)); } }
Hors ligne
// recuperation de la liste des arretes d'exercices $this->model->addComponent('Model_Arrete'); $arreteList = $this->model->getArreteNames(); asort($arreteList); // tri alphabetique croissant $arreteElement = $form->createElement('FilteringSelect', 'arr_id', array('label' => 'Arrete')); $arreteElement->addMultiOptions($arreteList);
Dans Model_Arrete
/** * Retourne la liste des noms des arretes * @return array(arr_id => arr_name) */ public function getNames() { $arreteNames = $this->fetchAll($this->select() ->from('arrete', array('arr_id', 'arr_name')) ->where("arr_close=0")); $arreteNames = $arreteNames->toArray(); $res = array(); // transformation de l'array $arreteNames foreach($arreteNames as $key => $arrete) { $res[$arrete['arr_id']] = $test['arr_name']; } return $res; }
Hors ligne
merci d'avoir répondu!
je vais essayer de comprendre et appliquer la méthode.
Hors ligne
Dans models/DbTable/Category.php
<?php class Model_DbTable_Category extends Zend_Db_Table { protected $_name = 'category'; protected $_primary = 'cat_id'; }
Ensuite dans ta classe Form_Product tu rajoutes ceci
$categoryModel = new Model_DbTable_Category(); $categories = $categoryModel->fetchAll(); $categoriesTab = array(); foreach ($categories as $categorie) { $categoriesTab[$categorie->cat_id] = $categorie->cat_name; } $categorySelect = new Zend_Form_Element_Select('cat_id'); $categorySelect->setMultiOptions($categoriesTab); $categorySelect->setLabel("Catégories :"); $categorySelect->setRequired(true); $categorySelect->addValidator(new Zend_Validate_Int()); $this->addElement($categorySelect);
ça devrait être bon
Hors ligne
Merci beaucoup dev-k! C'était justement ce qu'il me fallait!!! Ça marche nickel!
Hors ligne
dev-k a écrit:
Dans models/DbTable/Category.php
Code:
<?php class Model_DbTable_Category extends Zend_Db_Table { protected $_name = 'category'; protected $_primary = 'cat_id'; }Ensuite dans ta classe Form_Product tu rajoutes ceci
Code:
$categoryModel = new Model_DbTable_Category(); $categories = $categoryModel->fetchAll(); $categoriesTab = array(); foreach ($categories as $categorie) { $categoriesTab[$categorie->cat_id] = $categorie->cat_name; } $categorySelect = new Zend_Form_Element_Select('cat_id'); $categorySelect->setMultiOptions($categoriesTab); $categorySelect->setLabel("Catégories :"); $categorySelect->setRequired(true); $categorySelect->addValidator(new Zend_Validate_Int()); $this->addElement($categorySelect);ça devrait être bon
merci pour la réponse! une toute dernière question,
comment on fait pour récupérer le cat_id correspondant au cat_name sélectionné par l'user? (le cat_id mais pas le cat_name). C'est dans quelle variable?
encore merci!
Hors ligne
Quand tu soumets ton formulaire, tu vérifies si les données et qu'elles sont valides de cette façon
if ($this->getRequest()->isPost() && $form->isValid($_POST)) { ......
à l'intérieur de cette condition du peux récupérer les données de ton formulaires
$values = $form->getValues(); //l'id de la catégorie selectionnée $cat_id = $values['cat_id'];
Dans ton cas
$form = new Form_Product();
j'espère que j'ai bien répondu
Hors ligne
je crois que j'ai trouvé la solution moi meme! j'ai utilisé search_array
Hors ligne
merci pour la réponse! c bon
Hors ligne
Pages: 1