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 :

Recuperer un parametre javascript depuis controlleur


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut Recuperer un parametre javascript depuis controlleur
    Salut à tous,

    J'ai un souci, qui je suppose, ne devrait pas vous posez problème :
    J'ai un (correction) formulaire sur lequel 4 icônes sont sélectionnables pour valider le formulaire :

    - icone PDF
    - icone HTML
    - icone ODS
    - icone XLS

    Au départ, la sélection d'une icone appelait une action du même nom ( xlsAction par exemple). Sauf que le code commence a se répéter et j'aurais aimé avoir une seule action, et un paramètre pour le format.

    soit exporterAction()
    et dans cette fonction, je récupère le format ( soit via le registry , soit la session, je m'en fous). Le truc c'est que je ne peux pas ajouter de php dans mon JavaScript et que j'ai pas envie de passer par des trucs complexes, l'un de vous pourrais me donner une astuce pour récupérer depuis l'action exporter, la nature de l'icône.

    voici le code relatif aux icones :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		<div id="CMD_HTML"><img id="btnHTML" type="image"
    			src="../public/images/HTML.png" name="search" width="64" height="64"
    			onclick=" asHTML()" style="cursor: pointer;"><br>
    		<span id="btnHtml" dojoType="dijit.Tooltip" connectId="btnHTML">Exporter
    		au format HTML</span></div>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            function asHTML() {
            	document.formSetup.action= './exporter/hmtl';
            	document.formSetup.submit();
            }
    Merci d'avance

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    ReSalut a tous,

    Bon, j'ai pas mal parcouru le net, et ce problème n'a pas l'air si simple.
    Passer des paramètres de JS vers PHP est une chose pénible a mettre en place.

    J'ajoute au passage, un autre problème que j'ai, sur le même thème.

    Dans ma vue : format/visualiser , l'utilisateur admire un tableau JavaScript dressant la liste des données qu'il pourra exporter au moyen de case a cocher.
    En choisissant une des 4 icônes déjà évoquées ( voir premier post ), l'application doit exporter les ligne cochées, dans le format sélectionné.

    Il s'agit encore du même problème, passer les lignes cochées uniquement, au contrôleur format/exporter.

    D'après mes lectures, une solution appropriée est la suivante : rajouter une colonne dans ma base de données ( un booléen ) qui indique si la ligne doit être exportée. Et AJAX irait, au moment du clic sur l'icône, passer les bonnes lignes a un dans la BD. Ce mécanisme se ferait via L'objet XMLHttpRequest si j'ai bien compris.

    Ma question est donc la suivante : suis-je suis la bonne voie ? quelqu'un peut il m'aider a résoudre ce problème de passage de JS vers PHP.

  3. #3
    Membre Expert
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Par défaut
    Bonsoir,

    Pour la fonction est son paramètre, tu peux utiliser le DOM pour les distinguer

    exemple :
    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
     
    <html>
     
    	<head>
    		<title>test</title>
    		<script type="text/javascript">
     
    function exporter(elm) {
     
    	switch(elm.id) {
     
    		case 'xls':
    			// mon script XLS
    			alert('Export Excel');
    			break;
     
    		case 'csv':
    			// mon script CSV
    			alert('Export CSV');
    			break;
     
    		case 'pdf':
    			// mon script PDF
    			alert('Export PDF');
    			break;
     
    	}
            return false;
     
    }
    		</script>
    	</head>
     
    <body>
    	<ul>
    		<li><a href="#" id="xls" title="Exporter au format Excel" onclick="return exporter(this);"><img src="mon_icone_xls.png" alt="Exporter au format Excel" /></li>
    		<li><a href="#" id="csv" title="Exporter au format CSV" onclick="return exporter(this);"><img src="mon_icone_csv.png" alt="Exporter au format CSV" /></li>
    		<li><a href="#" id="pdf" title="Exporter au format PDF" onclick="return exporter(this);"><img src="mon_icone_pdf.png" alt="Exporter au format PDF" /></li>
    	</ul>
    </body>
    </html>
    pour les checkbox, il existe plusieurs solutions dont celle-ci :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <html>
     
    	<head>
    		<title>test</title>
    		<script type="text/javascript">
     
    function exporter(elm) {
     
    	export=new Array();
     
    	documents= document.getElementsByTagName('input');
     
    	for(var i=0; i<documents.length; i++) {
    		if(documents[i].checked)
    			export.push(documents[i].value);
    	}
     
    	switch(elm.id) {
     
    		case 'xls':
    			// mon script XLS
    			alert('Export Excel : ['+export.join(',')+']');
    			break;
     
    		case 'csv':
    			// mon script CSV
    			alert('Export CSV : ['+export.join(',')+']');
    			break;
     
    		case 'pdf':
    			// mon script PDF
    			alert('Export PDF : ['+export.join(',')+']');
    			break;
     
    	}
            return false;
     
    }
    		</script>
    	</head>
     
    <body>
    	<table border="1" cellpadding="5" cellspacing="0" />
    		<tr>
    			<td><input type="checkbox" name="export[]" value="1"/></td>
    			<td>Document 1</td>
    		</tr>
    		<tr>
    			<td><input type="checkbox" name="export[]" value="2"/></td>
    			<td>Document 2</td>
    		</tr>
    		<tr>
    			<td><input type="checkbox" name="export[]" value="3"/></td>
    			<td>Document 3</td>
    		</tr>
    		<tr>
    			<td><input type="checkbox" name="export[]" value="4"/></td>
    			<td>Document 4</td>
    		</tr>
    		<tr>
    			<td><input type="checkbox" name="export[]" value="5"/></td>
    			<td>Document 5</td>
    		</tr>
    		<tr>
    			<td colspan="2">
    				<ul>
    					<li><a href="#" id="xls" title="Exporter au format Excel" onclick="return exporter(this);"><img src="mon_icone_xls.png" alt="Exporter au format Excel" /></li>
    					<li><a href="#" id="csv" title="Exporter au format CSV" onclick="return exporter(this);"><img src="mon_icone_csv.png" alt="Exporter au format CSV" /></li>
    					<li><a href="#" id="pdf" title="Exporter au format PDF" onclick="return exporter(this);"><img src="mon_icone_pdf.png" alt="Exporter au format PDF" /></li>
    				</ul>
    			</td>
    		</tr>
    	</table>
    </body>
    </html>
    Mais je ne sais pas si c'est bien ce que tu voulais, vu qu'on est dans le forum zend...


  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    Merci de cette réponse. Il me manque juste la partie avec PHP pour faire ce que je veux.

    Pour la fonction et son paramètre.
    Par fonction j'entendais l'action du contrôleur auquel s'adresse la vue ci-dessous :

    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
    function exporter(elm) {
     
    	switch(elm.id) {
     
    		case 'xls':
    			// mon script XLS
    			alert('Export Excel');
    			break;
     
    		case 'csv':
    			// mon script CSV
    			alert('Export CSV');
    			break;
     
    		case 'pdf':
    			// mon script PDF
    			alert('Export PDF');
    			break;
     
    	}
            return false;
    La factorisation du code JS est sympathique, maintenant ce que je voudrais, c'est passer le formulaire à l'action dans le exporterController de zend où l'action exporterAction() pourra retrouver le format demandé par l'utilisateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    case "btnPDF":
      document.formSetup.action= './exporter/exporter';
      document.formSetup.submit();
      break;
    Je ne sais pas comment récupérer le format au niveau du controleur PHP en fait.

    Concernant les checkbox, merci du coup de main, il me reste juste a faire passer le tableau export=new Array(); au controleur PHP.
    Je veux vraiment faire transiter des informations du formulaire JS et de la liste avec les checkbox vers le contrôleur PHP et je ne sais pas comment faire.

    J'ai pu voir que certains, mettait dans le formulaire un input hidden et qu'au niveau du code js il le remplissait avec ce qu'il voulait voir passer au code PHP. Est-ce une solution ?

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    Apparement l'input Hidden est viable, mais là j'ai un souci lié a Zend, ce qui va légitimer l'endroit du post

    Quand je fais ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case "btnXLS":
                	document.formSetup.action= './exporter/xls';
                	document.getElementById('selectedFormat').value = "XLS" ;
                	document.formSetup.submit();
            	break;
    Aucun problème il trouve bien dans le module format , le controleur exporter et l'action xls => function xlsAction() {

    Mais quand j'ecris cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    case "btnXLS":
                	document.formSetup.action= './exporter/exporter';
                	document.getElementById('selectedFormat').value = "XLS" ;
                	document.formSetup.submit();
            	break;
    Il ne trouve pas l'action exporter du controleur exporter du module format.
    Voici le message erreur retourné :

    Message : Invalid controller specified (authentication)

    File : C:\xampp\.....\library\Zend\Controller\Dispatcher\Standard.php

    Line : 248


    Et pourtant dans mon boostrap j'ai pas l'impression qu'il manque un truc :

    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
    	protected function _initAutoload()
    	{
    		// On enregistre les modules (les parties de notre application)
    		$loader = new Zend_Application_Module_Autoloader(array(
    		            'namespace' => '',// pas de namespace
    		            'basePath'  => APPLICATION_PATH.'/modules/default'),
    		array(
                    'namespace' => 'Admin_', 
                    'basePath'  => APPLICATION_PATH . '/modules/admin',
    		),
    		array(
                    'namespace' => 'Load_', 
                    'basePath'  => APPLICATION_PATH . '/modules/load',
    		),
    		array(
                    'namespace' => 'Format_', 
                    'basePath'  => APPLICATION_PATH . '/modules/format',
    		)
    		);
    Si vous savez quoi rajouter pour qu'il puisse enfin trouver l'action exporter de mon contrôleur, je serais totalement débloqué

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    Bon en fait y'avait le système de droit a déverrouiller, un fichier enginAcl que j'avais pas vu. A ma décharge, c'est une reprise de projet

    Merci bien Ska

Discussions similaires

  1. Recuperer un parametre en Javascript.
    Par GYK dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 27/01/2009, 13h36
  2. [jsp][servlet]pb recuperation de parametre
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 23
    Dernier message: 19/11/2008, 09h10
  3. Réponses: 6
    Dernier message: 27/02/2008, 09h51
  4. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15
  5. [langage] procedure : recuperation de parametres
    Par K-ZimiR dans le forum Langage
    Réponses: 7
    Dernier message: 22/04/2004, 14h24

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