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 :

jQuery - Charger une view dynamiquement [ZF 1.10]


Sujet :

Zend Framework PHP

  1. #1
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut jQuery - Charger une view dynamiquement
    Bonjour,

    ancienne j'utilisais une fonction javascript pour charger mes pages php dans un div.

    J'aimerais maintenant charger une view dans ce div (afin de rester dans un modèle MVC)

    J'ai ajouter le jQuery Helper :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $view->addHelperPath('ZendX/JQuery/View/Helper/', 'ZendX_JQuery_View_Helper');
    mais ensuite je ne sais pas comment faire...

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Ensuite, tu instancies Jquery dans ton layout

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $this->jQuery()->enable();
            $this->jQuery()->setLocalPath($this->baseUrl() . '/public/js/jquery-1.4.2.min.js')
    Et puis tu fais comme d'habitude

  3. #3
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut
    jQuery est bien instancié, mais ensuite c'est la façon de chargé dynamiquement la view que je ne comprend pas.

    Avant je faisait ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    url = "page.php;
     
    html = $.ajax({ url: "../"+url, async: false }).responseText;
     
    $('#dynamicWindow').html(html);
    page.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(!empty($_GET["id"]))
    {
     
    	include_once 'blabla.php';
     
    	$Type = $enreg["type"];
     
    	......
    	du code html renvoyé par php
    }
    Maintenant je voudrais que ça appelle ma view (elle la view va appeler son controller, non ?)

  4. #4
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut
    Je suis toujours bloqué, je ne comprend pas comment appeler la view, qui va elle appeler son script.

    D'ailleurs faut-il un controller ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (elle la view va appeler son controller, non ?)
    c'est le controller qui appel la vue par le nom d'action pas le contraire .

    la récupération des données se déclenche sur : chargement de la page , click ,... ?

    je te propose une solution (mais pas assez sophistiqué à toi de choisir ).

    tu peux placer le script page.php dans dans dossier au même niveau que public :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public/
            index.php
    ajax/
          page.php
    comme ça tu peux appeler le contenu de page en mode Ajax .

  6. #6
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut
    Ha oui exact.
    Ta solution marche mais ce n'est pas ce que je veux faire, j'aimerais séparer le script de l'affichage.

    En fait j'aimerais appeler mon controller qui lui va appeler la view, c'est possible ?

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Par défaut
    si tu lance Ajax tu peux le détecter dans l'action en cours :
    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
     
    public function ajaxAction()
    {
         // on détecte l'ajax
         if($this->getRequest()->isXmlHttpRequest()){ 
     
               // on desactive le rendue des vue et layout
               $this->_helper->viewRenderer->setNoRender();
               $this->_helper->layout()->disableLayout();
     
                /*
                  ici le traitement ........... 
                */
          }
    }

  8. #8
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut
    Je suis toujours autant largué ^^

    Par exemple je suis sur ma page index :

    - J'ai un lien qui doit faire l'appel vers une page en ajax, comment j'écris ce lien ?

    - Mon lien va en fait appeler un fonction qui est dans mon indexController c'est ça ?

    - Est-il possible d'appeler un fonction d'un autre controller ?

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 314
    Par défaut
    oui c'est possible .

    Mon lien va en fait appeler un fonction qui est dans mon indexController c'est ça ?
    si tu veux récupérer la vue d'une action dans ton contrôleur IndexController , Exemple :
    supposons la fonction située dans IndexController est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function contactAction()
        {
            // action body
        }
    dans la vue en cours (ou Layout si tu l'utilise ) tu créer un lien qui va appeler le script de vue de l'action (contactAction) , et une div où sera récupérer le contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <a href="#" onclick="contact(); return false">contact</a>
    <div id="contact"></div>
    tu creer une fonction javascript (ici un exemple en jQuery) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function contact()
    {
    	$('#contact').html('loading...');
    	$.ajax({
    		   	url:'/index/contact/',
    			success:function(response){
    					$('#contact').html(response);
    				},
    			failure:function(){
    					alert('Échec de requête ajax');
    				}
    		   });
    }
    tu remarque le paramètre url:'/index/contact/' c'est la clé de la solution .

    Est-il possible d'appeler un fonction d'un autre controller ?
    oui.

    Exemple : si tu veux appeler autre script de vue d'une action située dans un autre contrôleur , il suffit de changer le paramètre url .

    par exemple , on veut appeler l'action barAction du contrôleur FooController :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class FooController extends Zend_Controller_Action
    {
     
    	public function barAction()
    	{
     
    	}
    }
    dans ce cas le paramètre url devient :

  10. #10
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut
    Super, c'est exactement ce que je voulais faire.

    Désolé mais j'avais du mal à saisir

  11. #11
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut
    C'est parfait, avec les messages précédents j'ai réussi à désactiver le layout dans mes actions si elles sont appelées en Ajax.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Si requête Ajax
    		if($this->getRequest()->isXmlHttpRequest()){ 
     
               // On désactive le layout
               $this->_helper->layout()->disableLayout();
     
          	}
    Par contre je suis obligé de recopier ce code dans chaque action ? l n'y a pas un moyen de désactiver le layout sur toutes les actions appelées en Ajax ?

  12. #12
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Dans une méthode init() de ton controller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public function init(){
     
    if($this->getRequest()->isXmlHttpRequest()){ 
     
               // On désactive le layout
               $this->_helper->layout()->disableLayout();
     
          	}
     
    }

  13. #13
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut
    Merci Déjà ça m'avance mais... je me suis trompé dans la question

    La question mieux formulée : N'y a pas un moyen de désactiver le layout sur toutes les actions de tous les controllers appelées en Ajax ?


  14. #14
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    A testé : dans ton boostrap


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
            $request= new Zend_Controller_Request_Http();
            if($request->isXmlHttpRequest()){
                $this->_front->setParam("noViewRenderer",true);
     
            }

  15. #15
    Membre confirmé Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Par défaut
    C'est parfait merci

    J'ai rajouté ça dans mon application/Bootstrap.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    protected function _initRequest_Http()
    	{
    		$request= new Zend_Controller_Request_Http();
     
    	 	// Si requête Ajax
    		if($request->isXmlHttpRequest()){
     
    			$layout = $this->getResource('layout');
     
    			$layout->disableLayout();
     
     		}
     
    	}

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

Discussions similaires

  1. Charger une librairie dynamique
    Par mrfirefunk dans le forum Applets
    Réponses: 1
    Dernier message: 27/11/2007, 10h36
  2. Charger une liste dynamiquement avec AJAX
    Par macra dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/10/2006, 22h39
  3. [AJAX] Charger une liste dynamiquement
    Par macra dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/10/2006, 22h34
  4. Réponses: 6
    Dernier message: 19/10/2006, 10h36
  5. Hibernate : charger une collection dynamiquement
    Par Tail dans le forum Hibernate
    Réponses: 4
    Dernier message: 04/08/2006, 10h35

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