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