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 27/04/2011, 11h10   #1
Futur Membre du Club
 
FX
Inscription : juillet 2010
Messages : 75
Détails du profil
Informations personnelles :
Nom : FX

Informations forums :
Inscription : juillet 2010
Messages : 75
Points : 17
Points : 17
Par défaut Erreur formatage tableau Autocomplete

bonjour,
je cherche à faire un autocomplete avec Jquery ui autocomplete, mais j'ai un problème avec le formatage du tableau de réponse.

Dans mon fichier action.class.php, j'ai l'action suivante :

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
  //Va chercher tous les mots-clefs en BDD nécessaires à l'autocompletion
  public function executeAutocomplete(sfWebRequest $request)
  {
	 //Si pas une appelée par autre chose qu'une requête Ajax alors on renvoi erreur 404
	 $this->forward404Unless($request->isXmlHttpRequest());
 
	 $this->getResponse()->setCookie('albums', 'actif');
 
	 $this->getResponse()->setContentType('application/json');
 
	 $term = $request->getParameter('term');
 
	 //SQL LIKE STRING%
	 $req1 = Doctrine::getTable('motsclef')
			->createQuery('a')
			->leftJoin('a.Translation t')
			->where('t.intitule LIKE ?',$term.'%')
			->orderBy('t.intitule')
			->execute();
 
	 $return_arr = array();
 
	 foreach ( $req1 as $result )
	 {	 
		$tabmc['id'] = $result->getId();
		$tabmc['value'] = $result->getIntitule();
 
		array_push($return_arr,$tabmc);
	 }	 
 
	 return $this->$return_arr;
  }
Et dans mon layout.php, j'ai le code suivant :

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
				<script type="text/javascript">
				$(document).ready(function(){
 
						//Autocomplete Search Tag
						$("#container-menu-recherche-champ").autocomplete({
								source: "<?php echo url_for('recherche_autocomplete'); ?>",
								minLength: 1,
								select: function(event, ui) {
									$('#search_motsclef_id').val(ui.item.id);
									$("#container-menu-recherche-champ").val(ui.item.value);	
								},
								change: function(event, ui){
									var motsclef_id=ui.item.id;
									$("#container-menu-recherche-champ").val(ui.item.value);
							   }
							});	
 
					$("#launch_search").click(function(){
						var targetUrl = "<?php //echo url_for('recherche_show_motsclef','2'); ?>";
						window.location.href = targetUrl;//envoi vers url
					  return false;
					});
 
				});
				</script>				
 
					<!-- Formulaire de recherche -->
					<form method="get" action="" id="formu-recherche">
						<table style="margin-top:-5px;margin-bottom:2px;">
							<tr>
								<td style="float:left;">
								<input type="hidden" id="search_motsclef_id" name="search_motsclef_id" value=""/>
								<input type="text" id="container-menu-recherche-champ" style="font-size:10px;width:193px;" name="value" value="<?php echo __("Search"); ?>..."
								onfocus="if(this.value=='<?php echo __("Search"); ?>...') { this.value=''; }" 
								onblur="if(this.value=='') { this.value = '<?php echo __("Search"); ?>...' ;} "/></td>
								<td><a href="#" title="<?php echo __("Search"); ?>"><img border="0" src="/images/icones/preview.png" title="<?php echo __("Search"); ?>" id="launch_search"/></a></td>
							</tr>
						</table>
					</form>
J'ai l'erreur suivante :

Citation:
<b>Notice</b>: Array to string conversion in <b>/home/sd_phototheque/apps/frontend/modules/recherche/actions/actions.class.php</b> on line <b>44</b><br />
Quel serait le bon format pour retourner les valeurs à ui autocomplete.

Sachant que j'ai besoin de l'id et de l'intitule.

Merci pour votre aide.
pixworld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 11h42   #2
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
Tu peux directement formater en tableau avec hydratation de doctrine.

Pour envoyer directement (sans passer par un template, ce qui est l'idéal avec json) il faut commencer par formater en json et ensuite préciser l'entête de la réponse.
__________________
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 06/05/2011, 13h13   #3
Futur Membre du Club
 
FX
Inscription : juillet 2010
Messages : 75
Détails du profil
Informations personnelles :
Nom : FX

Informations forums :
Inscription : juillet 2010
Messages : 75
Points : 17
Points : 17
bonjour,

j'ai finalement mis en place l'action suivante pour récupérer les mots-clés dans un ui autocomplete.

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
  //Va chercher tous les mots-clefs en BDD nécessaires à l'autocompletion
  public function executeAutocomplete(sfWebRequest $request)
  {
	 //Si pas une appelée par autre chose qu'une requête Ajax alors on renvoi erreur 404
	 $this->forward404Unless($request->isXmlHttpRequest());
 
	 $this->getResponse()->setCookie('albums', 'actif');
 
	$this->getResponse()->setContentType('application/json');
	 $term = $request->getParameter('term');
 
	 //SQL LIKE STRING%
	 $req1 = Doctrine::getTable('motsclef')
			->createQuery('a')
			->leftJoin('a.Translation t')
			->where('t.intitule LIKE ?',$term.'%')
			->orderBy('t.intitule')
			->execute();
 
	 $return_arr = array();
 
	 foreach ( $req1 as $result )
	 {	 
		$tabmc['id'] = $result->getId();
		$tabmc['value'] = $result->getIntitule();
 
		array_push($return_arr,$tabmc);
	 }	 
 
	return $this->renderText( json_encode( $return_arr ) );	 
 
  }
Je récupère bien l'id et l'intitule.

Je rencontre encore 1 difficulté, comment écrire ma route avec url_for en javascript - url_for('recherche_show_motsclef','2');

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
				<script type="text/javascript">
				$(document).ready(function(){
 
						//Autocomplete Search Tag
						$("#container-menu-recherche-champ").autocomplete({
								source: "<?php echo url_for('@recherche_autocomplete'); ?>",
								minLength: 1,
								open: function(event, ui) { $(".ui-autocomplete").css("z-index", 4); },
								select: function(event, ui) {
									$('#search_motsclef_id').val(ui.item.id);
									$("#container-menu-recherche-champ").val(ui.item.value);	
								},
								change: function(event, ui){
									$("#container-menu-recherche-champ").val(ui.item.value);
							   }
							});	
 
					$("#launch_search").click(function(){
						var motsclef_id = $("#search_motsclef_id").val();
						var targetUrl = "<?php echo url_for('recherche_show_motsclef','2'); ?>";
						window.location.href = targetUrl;//envoi vers url
					  return false;
					});
 
				});
				</script>				
 
					<!-- Formulaire de recherche -->
					<form method="get" action="" id="formu-recherche">
						<table style="margin-top:-5px;margin-bottom:2px;">
							<tr>
								<td style="float:left;">
								<input type="hidden" id="search_motsclef_id" name="search_motsclef_id" value=""/>
								<input type="text" id="container-menu-recherche-champ" style="font-size:10px;width:193px;" name="value" value="<?php echo __("Search"); ?>..."
								onfocus="if(this.value=='<?php echo __("Search"); ?>...') { this.value=''; }" 
								onblur="if(this.value=='') { this.value = '<?php echo __("Search"); ?>...' ;} "/></td>
								<td><a href="#" title="<?php echo __("Search"); ?>"><img border="0" src="/images/icones/preview.png" title="<?php echo __("Search"); ?>" id="launch_search"/></a></td>
							</tr>
						</table>
					</form>
pixworld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2011, 09h32   #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
Citation:
Je rencontre encore 1 difficulté, comment écrire ma route avec url_for en javascript
Mais encore ...
__________________
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 09/05/2011, 10h11   #5
Futur Membre du Club
 
FX
Inscription : juillet 2010
Messages : 75
Détails du profil
Informations personnelles :
Nom : FX

Informations forums :
Inscription : juillet 2010
Messages : 75
Points : 17
Points : 17
Je récupère les données du mot-clé :
ui.item.id
et
ui.item.value

seulement, si j'indique à url_for uniquement l'id, il m'indique qu'il ne s'agit pas d'un array et bloque le script.

est-il possible de passer ses valeurs à url_for sous forme de array en javascript et comment ?

Si je n'y arriverai pas, j'ai une solution qui consisterait à écrire directement mon url sans passer par le routing, mais je préférerai passer par le routing.

/recherche/tag/2/new-york

Merci.
pixworld est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 10h50   #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
url_for est une fonction PHP.

Elle ne peut être utilisée directement dans du javascript.

Par contre, à mon avis, ton code de génération de ton script devrait ressembler à :
Code :
var targetUrl = "<?php echo url_for('recherche_show_motsclef?id=2'); ?>"
__________________
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 08h09.


 
 
 
 
Partenaires

Hébergement Web