Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-02-2009 15:38:46

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Exemple de maj d'un Element Select au click

Salut à tous
Je cherche un exemple complet de màj de la liste d'un élément Select d'une Zend_Form à partir d'une base de données au moment où l'utilisateur clique dessus.
Je cherche également à mettre à jour une liste d'un élément Select en fonction de l'élément choisi dans une autre liste. Exemple la liste des villes est chargée en fonction du pays choisi.
Merci

Dernière modification par ziedb (03-02-2009 17:46:11)

Hors ligne

 

#2 04-02-2009 11:17:58

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Re: Exemple de maj d'un Element Select au click

sad

Hors ligne

 

#3 04-02-2009 12:50:16

Alshten
Nouveau membre
Date d'inscription: 26-01-2009
Messages: 3

Re: Exemple de maj d'un Element Select au click

Euh tout ça, ça se fait en Javascript. smile

Hors ligne

 

#4 04-02-2009 15:53:31

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Re: Exemple de maj d'un Element Select au click

Oui mais je pense pas que ça soit adapté pour gérer la validation avec Zend_Form

Hors ligne

 

#5 04-02-2009 16:13:43

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: Exemple de maj d'un Element Select au click

J'ai tellement souffert moi-même pour avoir un truc de ce genre qui marche bien que je ne peux qu'aider quelqu'un face aux mêmes difficultés.
J'y suis parvenu à 99% grâce à ce forum, mais certaines informations sont réparties dans plusieurs contributions.

On part du principe d'une appli de type Zend Framework de base qui tourne déjà et on va ajouter un dialogue avec de l'autocompletion.
J'utilise Dojo, d'autres pourront peut-être de donner une solution avec Jquery et encore d'autres feront autrement que moi avec Dojo.
Dans cet exemple j'utilise une ComboBox pour l'autocomplétion ce qui permet à l'utilisateur de saisir une valeur différente de ce qui lui est proposé.
Voilà une solution possible :

Dans initializer.php :

Code:

public function initView()
    {
        $view = new Zend_View();
                Zend_Dojo::enableView($view);
        $view->dojo()->addStylesheetModule('dijit.themes.tundra');
        $view->dojo()->enable(true);
        $view->dojo()->setDjConfigOption('usePlainJson', true);
               $doctypeHelper = new Zend_View_Helper_Doctype();
        $doctypeHelper->doctype('XHTML1_TRANSITIONAL');
        $view->setEncoding("UTF-8");
        Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setView($view);
        Zend_Layout::startMvc();    
    }

Dans indexController (pour afficher le formulaire):

Code:

public function indexAction()
    {
        //  formulaire
        $formulaire = new formulaire();
        if ($this->getRequest()->isPost())
        {
            if (!$fsportif->isValid($_POST))
            {
                // Des erreurs de premier niveau ont été detectées
                
            }
            else 
            {
                $values = $formulaire->getValues();
                // Traitement de la sasie
            }
        }
        // Passage du formulaire à la vue
        $this->view->formulaire = $formulaire;
    }

Dans la vue index.phtml:

Code:

<?php
/**
 * Default home page view
 *  
 * @author
 * @version
 */
$this->headTitle('New Zend Framework Project');
$this->placeholder('title')->set('Welcome');
php echo $this->formulaire;

Le layout :

Code:

<?php

/**
 * Default Layout
 *  
 * @author
 * @version
 */

echo '<?xml version="1.0" encoding="UTF-8" ?>';
echo $this->doctype() 
?>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <?php 
        echo $this->headTitle();
        if ($this->dojo()->isEnabled()){
            $this->dojo()->setLocalPath('/monappli/public/scripts/dojo/dojo/dojo.js')
                          ->addStyleSheetModule('dijit.themes.tundra');
            echo $this->dojo();
        }
        echo $this->headScript();
        echo $this->headStyle();
        ?>
    </head>
    <body class="tundra">
        <h1><?php echo $this->placeholder('title') ?></h1>
        <?php echo $this->layout()->content ?>

        <br />
        <br />
    </body>
</html>

Le formulaire :

Code:

<?php
require_once ('Zend/Dojo/Form.php');
class formulaire extends Zend_Dojo_Form
{
    protected $_standardElementDecorator = array(
        'ViewHelper',
        array('Description', array('class' => 'formHint')),
        array('Label', array('requiredPrefix' => '<em>*&nbsp;</em>', 'escape' => false, 'class'=>'zonelabel')),
        array('Errors', array('placement' => 'append')),
        array('HtmlTag', array('tag' => 'p', 'class' => 'ctrlHolder'))
    );
    /**
     * 
     *@param array|Zend_Config|null $options 
     *@return void 
     */
    public function __construct ($options = null, $tabsports,$tabdept,$communaute)
    {
        parent::__construct($options = null);
        
         $this->setAction('')
              ->setMethod('post')
              ->setEnctype(Zend_Form::ENCTYPE_MULTIPART);
        $listedevaleurs = new Zend_Dojo_Form_Element_ComboBox('valeur_id'); 
         $listedevaleurs->setDecorators(array('DijitElement',array('Label', array('escape'=>false)),  array('HtmlTag', array('tag'=>'p'))))
                        ->setLabel('Votre choix')
                        ->setAutoComplete(true)
                       ->setStoreId('valeurStore')
                       ->setStoreType('dojo.data.ItemFileReadStore')
                       ->setStoreParams(array('url'=>'/monappli/public/default/index/listevaleurs'))
                       ->setAttrib("searchAttr", "valeur_nom");                       
      // Boutons
      $bouton_submit = new Zend_Form_Element_Submit('submit');
      $bouton_submit->setLabel('Enregistrer')
                        ->removeDecorator('DtDdWrapper');
      $sportifs_submit->setAttrib('class','boutonform');
        
        // Reset
      $bouton_reset = new Zend_Form_Element_Reset('reset');
      $bouton_reset->setLabel('Effacer')
                       ->removeDecorator('DtDdWrapper')
                       ->addDecorators(array(
                                    array('ViewHelper'),
                                    array('Errors'),
                                    array('HtmlTag', array('tag' => 'span')),
                                    ));
      $this->addElement($listedevaleurs)
             ->addElement($sportifs_submit)
             ->addElement($sportifs_reset);
    }
}
?>

La méthode qui sera donc appelée dans l'utilisateur clique ou tape quelque chose dans la zone est géré par /monappli/public/default/index/listevaleurs'
Donc cette méthode dans ton controller :

Code:

public function listevaleursAction()
    {
        $tablevaleurs = new Tablevaleurs();
        $result = $Tablevaleurs->tablevaleurs_listechoix();
        $data = new Zend_Dojo_Data('valeur_id', $result);
        $this->_helper->autoCompleteDojo($data);
    }

Il ne manque plus que l'accès à la la table de la base de données. Donc la méthode tablevaleurs_listechoix est écrite dans un fichier models (Tablevaleurs.php).
Dans le cas présent je prends toute la table  :

Code:

public function tablevaleurs_listechoix()
    {
        $result = $this->fetchAll();
        return $result;
    }

Je crois ne rien avoir oublié.

Dernière modification par Jean-Marc Rigade (04-02-2009 16:15:15)

Hors ligne

 

#6 04-02-2009 16:35:16

ziedb
Membre
Lieu: Tunis
Date d'inscription: 24-03-2008
Messages: 224

Re: Exemple de maj d'un Element Select au click

Un grand merci
Je reviens vers toi s'il y qqs chose qui n'est pas claire.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages