Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework
Zend Framework Forum d'entraide sur la programmation PHP avec Zend Framework. Avant de poster -> FAQ ZF, Cours ZF
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/05/2011, 14h04   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 109
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 109
Points : 11
Points : 11
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 :
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 :
1
2
3
4
5
 
        function asHTML() {
        	document.formSetup.action= './exporter/hmtl';
        	document.formSetup.submit();
        }
Merci d'avance
Knarf64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 20h35   #2
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 109
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 109
Points : 11
Points : 11
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.
Knarf64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 21h47   #3
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

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

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonsoir,

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

exemple :
Code :
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 :
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...

__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 14h08   #4
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 109
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 109
Points : 11
Points : 11
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 :
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 :
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 ?
Knarf64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 14h42   #5
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 109
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 109
Points : 11
Points : 11
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 :
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 :
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 :
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é
Knarf64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2011, 20h33   #6
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 109
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 109
Points : 11
Points : 11
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
Knarf64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h39.


 
 
 
 
Partenaires

Hébergement Web