IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Ajax : Mettre à jour une div de index.phtml [ZF 1.10]


Sujet :

Zend Framework PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 71
    Points : 58
    Points
    58
    Par défaut Ajax : Mettre à jour une div de index.phtml
    Bonjour,

    Je souhaite mettre à jour une div se trouvant dans mon index.phtml.

    Pour ce faire, je dois prendre en compte le résultat d'un calcul fait côté serveur dans l'action imc de mon controleur index.

    Je ne sais pas si ZF se suffit à lui seul pour mettre en oeuvre ajax ou si je dois utiliser en combinaison les fonctions ajax d'un framework javascript (ce que je sais faire).

    J'ai lu la doc sur les contextswitch, ajaxcontext, l'aide de vue action et tenté ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('#idImc')[0].innerHTML = <?php echo $this->action('imc', 'index', null, array('format' => 'html')); ?>;
    Que dire ? Je suis "embrouillé". Je ne vois toujours pas comment démarcher.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 71
    Points : 58
    Points
    58
    Par défaut
    Voici mon fichier index.phtml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <script type='text/javascript' src="scripts/jquery143.js"></script>
    <script type='text/javascript' src="scripts/calc-selector.js"></script>
     
     
    <input type="button" name="calculer" value="Tester" onClick="tester();">
     
    <form name="calculateurimc" method="post" action="Index/imc">
    	<table width="400px" height="91px">
    		<tbody>
     
             <tr>
    				<td width="400" valign="top" align="center" rowspan="1" colspan="3">
    					<h1>Calculateur IMC</h1>
    				</td>
    			</tr>
     
             <tr>
    				<td width="400" valign="top" align="center">
    					Taille (en cm) : <input type="text" maxlength="5" size="5" name="taille">
    				</td>
     
                <td width="400" valign="top" align="center">
    					Poids : <input type="text" maxlength="5" size="5" name="poids">
    				</td>
    			</tr>
     
    			<tr>
    				<td width="400" valign="top" align="right" rowspan="1" colspan="3">
    					<input type="submit" name="calculer" value="Calculer IMC">
    				</td>
    			</tr>
     
    			<tr>
                <td width="400" valign="top" align="center" id="idImc">
    					<!--Imc : <input type="text" maxlength="5" size="5" name="imc">-->
    				</td>
    			</tr>
     
    		</tbody>
    	</table>
    </form>
    Mon fichier calc-selector.js :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function tester()
    {
       //$('#idImc').html('../../application/views/scripts/index/imc');   
       $('#idImc')[0].innerHTML = <?php echo $this->action('imc', 'index', null); ?>;
    }
    Mon fichier imc.phtml :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    <?php
    //echo "test";
    echo $this->escape($this->result);
    ?>
    Et enfin mon fichier IndexController :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    class IndexController extends Zend_Controller_Action
    {
        private $calc;
     
        public function init()
        {
            /* Initialize action controller here */
     
          //$ajaxContext = $this->_helper->getHelper('AjaxContext');
    	   //$ajaxContext->addActionContext('imc', 'json')
    	               //->initContext();
     
        }
     
        public function indexAction()
        {
            // action body
     
        }
     
        public function imcAction()
        {
          $taille = $this->_request->getPost('taille');
          $poids = $this->_request->getPost('poids');
     
          $imc = $this->calc->imc($taille, $poids);
     
          $this->view->result = $imc;
          $this->view->taille = $taille;
          $this->view->poids = $poids;
          //$this->view->imc = $imc;
     
          //echo "imcAction";
        }
     
        public function preDispatch()
        {
    		parent::preDispatch();
     
          $this->calc = new Perso_CalculateurImc();
    	 }
    }
    L'aide de vue action appeler dans la fonction tester de mon fichier calc-selector.js est censé me renvoyer le résultat du script "imc.phtml" sous forme de chaine de caractère. Non ?!

    Parce que là, j'ai l'impression que le script de vue imc.phtml n'est même pas appelé.

    J'ai vu sur le web pas mal de façons différentes de mettre en oeuvre ajax sous ZF et je suppose que les façons de faire son fonction des versions de ZF. Bref je ne m'en sors pas.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    Perso j'utilise le framework JQuery et dans ton cas $.ajax (...), mais ce n'est pas la question.

    Du coté serveur tu peux soit retourner à ta requête Ajax du HTML dans ce cas dans ton action du controller il faut désactiver le layout pour ne renvoyer que la vue concerné pas l'action appelé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if($this->_request->isXmlHttpRequest()){
    	$this->_helper->layout->disableLayout();
    }
    Ou soit retourner à ta requête AJAX le format JSON, la vue n'est pas nécessaire dans ce cas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if($this->_request->isXmlHttpRequest()){
           $this->_helper->layout->disableLayout();	
           $dataToSend = array();
           $this->_helper->json($dataToSend
                                        , array( 'enableJsonExprFinder' => true ));
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 71
    Points : 58
    Points
    58
    Par défaut
    Bonjour freeseb,

    ajaxcontext est justement prévu pour désactiver les layouts.

    Donc je vais essayer d'utiliser au mieux les possibilités qu'offre ZF.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 71
    Points : 58
    Points
    58
    Par défaut
    Bon je pense que je dois suivre la piste ajaxcontext.

    Voici mon controleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    class IndexController extends Zend_Controller_Action
    {
        private $calc;
     
        public function init()
        {
            /* Initialize action controller here */
     
          $ajaxContext = $this->_helper->getHelper('AjaxContext');
    	   $ajaxContext->addActionContext('imc', 'html')
    	               ->initContext();
     
        }
     
        public function indexAction()
        {
            // action body
     
        }
     
        public function imcAction()
        {
            // action body
     
          //$plantage = 8/0;
     
          $taille = $this->_request->getPost('taille');
          $poids = $this->_request->getPost('poids');
     
          $imc = $this->calc->imc($taille, $poids);
     
          $this->view->result = $imc;
          $this->view->taille = $taille;
          $this->view->poids = $poids;
          //$this->view->imc = $imc;
     
          //echo "imcAction";
        }
     
        public function preDispatch()
        {
    		parent::preDispatch();
     
          $this->calc = new Perso_CalculateurImc();
    	 }
    }
    Et voilà mon appel ajax (avec jquery) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $.ajax(
          { // $.get n'est qu'une abbréviation de $.ajax avec des options de bases
              url: '/index/imc/format/html',
              type: "GET",
              dataType: "html",
              //data: {idParam: 4},
              success: tester_rep
          }
       );
    Comme vous pouvez le voir, je tente d'appeler l'action imcAction de mon controleur indexController.

    Et j'obtiens l'erreur suivante :
    Pourtant, dans les exemples que j'ai lu, les appels d'actions se font avec des url de ce format.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 71
    Points : 58
    Points
    58
    Par défaut Problème d'url de baseurl
    Bon, ok !

    Après avoir lu plusieurs codes, je vois que ma façon de procéder semble assez familière.

    Puis pour que l'url soit trouvée je dois la faire précéder de baseurl.

    Cela résoud mon problème sans que je comprenne vraiment pourquoi étant donné le contenu de baseurl. Mais j'ai préfèré vous en dire plus dans un autre sujet puisqu'il s'agit donc d'un problème d'url - ce que le titre de ce sujet n'indique pas.

    Rendez-vous donc ici :

    http://www.developpez.net/forums/d10...l/#post5617732


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dojo] AJAX/PHP Mettre à jour une div avec un contenu TabContainer
    Par chotana dans le forum Bibliothèques & Frameworks
    Réponses: 7
    Dernier message: 04/09/2012, 13h46
  2. Réponses: 3
    Dernier message: 05/07/2008, 19h09
  3. Mettre à jour une base sous SQL SERVER 2000
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 11/02/2005, 12h24
  4. Comment mettre à jour une ligne sans doublon via déclencheur
    Par fuelcontact dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/08/2004, 15h56
  5. Mettre à jour une table depuis une autre
    Par rsc dans le forum SQL
    Réponses: 4
    Dernier message: 09/07/2004, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo