Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
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 05/01/2011, 02h35   #1
Invité régulier
 
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 8
Points : 8
Par défaut Recharger une portion de code php sous symfony

Bonjour,

J'ai créé un formulaire Annonce je voudrais ajouter jusqu'à n photos à mon annonce. Pour l'instant je ne peux que charger une photo. Donc j'ai pensé à intégrer AJAX et recharger cette partie du code :

Code :
1
2
3
4
 <?php foreach ($form['newPhotos'] as $photo): ?>
      <?php echo $photo['caption']->renderRow() ?>
      <?php echo $photo['filename']->renderRow() ?>
      <?php endforeach; ?>
et bien sur un petit lien quand je clique de dessus ça doit me sortir la petite partie du code pour charger une nouvelle photo.

Code :
 <a href="#" onclick="envoieRequete('centre');" >test</a>
J'ai fait un code javascript :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
<script type="text/javascript">
function envoieRequete(id)
{
    alert('coucou');
 
 
	// On ouvre la requete vers la page désirée
 
	var e = document.createElement("div" );
    var f = document.createTextNode(<?php //rajouter ici mes balises php ou une réference vers cette portion de code;  ?> );
 
    e.appendChild(f);
    document.getElementById('id').appendChild(e);
 
}
</script>
<style>

En gros la question c'est comment je fais pour exécuter cette portion de code sachant que je ne peux pas passer la variable $form au javascript pour rappeler une nouvelle balise php qui contient la même portion du code dans le javascript.



Merci d'avance pour votre aide.
fastone650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 09h30   #2
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
Citation:
Envoyé par fastone650 Voir le message
[...]Donc j'ai pensé à intégrer AJAX et recharger cette partie du code [...]
Hé bien justement, pourquoi ne fais-tu pas ton traitement avec un appel AJAX ? La bibliothèque jQuery sera ton amie, ainsi que le tutoriel Jobeet.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 10h03   #3
Invité régulier
 
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 8
Points : 8
Merci pour ta réponse. Justement j'utilise du AJAX pas que javascript si tu regarde bien . Quelqu'un a une idée plus précise ?
fastone650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 10h45   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je ne sais pas trop pourquoi, mais il me semble que tu essaies de transformer une chose simple (affichage d'un formulaire avec plusieurs photos jointes) en un truc abominablement compliqué.

Pourquoi diantre veux-tu mettres du JS pour cela ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 12h03   #5
Invité régulier
 
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 8
Points : 8
Merci Micheal en fait désolé si j'ai mal expliqué mais en gros c'est que j'ai un formulaire comme ça :

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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php use_stylesheets_for_form($form) ?>
 
<?php use_javascript('jquery-1.4.4.min.js') ?> 
<?php use_javascript('/sfJqueryReloadedPlugin/js/jquery-1.3.2.min.js'); ?>
 
<script type="text/javascript">
$(document).ready(function(){
  $("#annonce_Departement_id").hide();
 
  $("#annonce_Region_id").change( function() {
     $("#annonce_Departement_id").show();
	$.post('<?php echo url_for('@ajax_departement') ?>', { region: $(this).val() },
    	function(data){
      $("#annonce_Departement_id").html(data);
    });
  });
});
</script>
<script type="text/javascript">
function envoieRequete(url,id)
{
	var xhr_object = null;
	var position = id;
	   if(window.XMLHttpRequest)  xhr_object = new XMLHttpRequest();
	  else
	    if (window.ActiveXObject)  xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
 
	// On ouvre la requete vers la page désirée
	xhr_object.open("GET", url, true);
	xhr_object.onreadystatechange = function(){
	if ( xhr_object.readyState == 4 )
	{
		// j'affiche dans la DIV spécifiées le contenu retourné par le fichier
		document.getElementById(position).innerHTML = xhr_object.responseText;
	}
	}
	// dans le cas du get
	xhr_object.send(null);
 
}
</script>
<style>
iframe {border-width: 0px;height: 60px;width: 400px;}
iframe.hidden {visibility: hidden;width:0px;height:0px;}
#main1 {overflow: hidden;margin: auto;width: 90%;height: 420px;border-style: solid;border-width: 1px;background-color: white;}
#images1 {width: 95%;height: auto;margin: 20px;}
#images1 div {margin: 10px;width: 130px;height: 130px;border-style: solid;border-width: 2px;border-color: #DEDFDE;float: left;overflow: hidden;}
#images1 div:hover {border-color: #D8F18C;}
#images1 img.load { margin-top:20px;}
.blacklink:link, .blacklink:alink, .blacklink:vlink, .blacklink:hover{color:#000000}
a.redlink{color: #96001C; text-decoration: none}
a:hover.redlink{color: #96001C; text-decoration: underline}
</style>
 
<?php use_javascripts_for_form($form) ?>
<?php echo form_tag_for($form, '@ads') ?>  
  <table id="job_form">
    <tfoot>
      <tr>
        <td colspan="2">
          <input type="submit" value=" Valider " />
        </td>
      </tr>
    </tfoot>
    <tbody>
      <?php echo $form['Categorie_id']->renderRow() ?>
 
      <?php echo $form['Region_id']->renderRow() ?>
	  <?php echo $form['Departement_id']->renderRow() ?> 
 
	  <?php //echo $form['Region']['Name']->renderRow() ?> <?php //bug ?>
 
	  <?php echo $form['CodePostal']->renderRow() ?>
	  <?php echo $form['Ville']->renderRow() ?>
	  <?php echo $form['TypeAnnonce']->renderRow() ?>
	  <?php echo $form['TitreAnnonce']->renderRow() ?>
	  <?php echo $form['TexteAnnonce']->renderRow() ?>
 
	  <?php echo $form['Prix']->renderRow() ?>
	  <?php echo $form['PhotoPrincipale']->renderRow(array('width' => 100)) ?>
	  <?php echo $form->renderHiddenFields() ?>
 
	  <?php foreach ($form['newPhotos'] as $photo): ?>
      <?php echo $photo['caption']->renderRow() ?>
      <?php echo $photo['filename']->renderRow() ?>
      <?php endforeach; ?>
 
	  <?php foreach ($form['Photos'] as $photo): ?>
	  <?php echo $photo['caption']->renderRow() ?>
	  <?php echo $photo['filename']->renderRow(array('width' => 100)) ?>
	  <?php endforeach; ?>
 
	  <?php //echo $form ?>
 
	  <div id="centre">
 
 
	  </div>
 
 
    </tbody>
  </table>
 
  <a href="#" onclick="envoieRequete('<?php echo url_for('@photos') ?>','centre');" >test</a>
 
</form>
Et je ne peux charger q'une seule photo mais j'aimerais appuyer sur un bouton ou un lien par exemple "Upload more photos"

Pour afficher un autre input de la nouvelle photo. Du coup j'ai compris qu'il fallait utiliser AJAX pour ça c'est ce que j'essaie de faire.


Sinon t'as quelque chose de mieux à me proposer ?

Merci
fastone650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h08   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
J'ai survolé le code mais pas trop de temps là. Le mélange dans un fichier de html, css et js ne me semble pas idéal mais peu marcher.

Je ne suis pas sur de comprendre ce que tu entends par charger plusieurs photos. Tu veux les afficher sur le site ou permettre à un utilisateur de uploader des photos sur le serveur ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 18h33   #7
Invité régulier
 
Inscription : novembre 2010
Messages : 36
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 36
Points : 8
Points : 8
En fait j'ai un formulaire Annonce et chaque utilisateur peut ajouter de 1 à n photos.
Bien entendu j'ai une table photos pour les stocker.

Je voudrais faire un upload Multiple d'images comme sur l'exemple suivant :

http://digitarald.de/project/fancyup...se/photoqueue/

Sauf que ceci n'est pas prévu pour symfony donc quasi impossible de les intégrer dans mon code.

Pour l'instant je ne peux rajouter qu'une seule photo si je laisse le code comme suit :

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
<?php use_stylesheets_for_form($form) ?>
 
<?php use_javascript('jquery-1.4.4.min.js') ?> 
<?php use_javascript('/sfJqueryReloadedPlugin/js/jquery-1.3.2.min.js'); ?>
 
<script type="text/javascript">
$(document).ready(function(){
  $("#annonce_Departement_id").hide();
 
  $("#annonce_Region_id").change( function() {
     $("#annonce_Departement_id").show();
	$.post('<?php echo url_for('@ajax_departement') ?>', { region: $(this).val() },
    	function(data){
      $("#annonce_Departement_id").html(data);
    });
  });
});
</script>
 
<?php use_javascripts_for_form($form) ?>
<?php echo form_tag_for($form, '@ads') ?>  
  <table id="job_form">
    <tfoot>
      <tr>
        <td colspan="2">
          <input type="submit" value="Preview your ad" />
        </td>
      </tr>
    </tfoot>
    <tbody>
      <?php echo $form['Categorie_id']->renderRow() ?>
 
      <?php echo $form['Region_id']->renderRow() ?>
	  <?php echo $form['Departement_id']->renderRow() ?> 
 
	  <?php //echo $form['Region']['Name']->renderRow() ?> <?php //bug ?>
 
	  <?php echo $form['CodePostal']->renderRow() ?>
	  <?php echo $form['Ville']->renderRow() ?>
	  <?php echo $form['TypeAnnonce']->renderRow() ?>
	  <?php echo $form['TitreAnnonce']->renderRow() ?>
	  <?php echo $form['TexteAnnonce']->renderRow() ?>
	  <?php echo $form['Prix']->renderRow() ?>
	  <?php echo $form['PhotoPrincipale']->renderRow(array('width' => 100)) ?>
	  <?php echo $form->renderHiddenFields() ?>
 
	  <?php foreach ($form['newPhotos'] as $photo): ?>
      <?php echo $photo['caption']->renderRow() ?>
      <?php echo $photo['filename']->renderRow() ?>
      <?php endforeach; ?>
	  <?php foreach ($form['Photos'] as $photo): ?>
	  <?php echo $photo['caption']->renderRow() ?>
	  <?php echo $photo['filename']->renderRow(array('width' => 100)) ?>
	  <?php endforeach; ?>
 
    </tbody>
  </table>
</form>


Merci.
fastone650 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 20h40   #8
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Regarde dans les plugin, dans mes souvenirs il y en a un qui fait cela spécifiquement.

Si non, tu en as un pour gérer les formulaire embeded qui pourrait te simplifier la vie.

Si tu tiens à passer par du JS, il faudrait voir sur le site de jquery s'il n'y a pas un plugin qui gère ce type de problème.

Pourquoi réinventer la roue ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta 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 14h14.


 
 
 
 
Partenaires

Hébergement Web