[RESOLU] Mise à jour données / variables dans plusieurs fonctions

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Mise à jour données / variables dans plusieurs fonctions

Re: Mise à jour données / variables dans plusieurs fonctions

par chaosad2 » 05 janv. 2023, 09:14

Solution trouvée :
Nominatim reverse renvoie des éléments différents selon la taille d'agglomération :
- city
- town
- village
- hamlet

Après avoir conservé les 5 chiffres après la virgule pour la précision avec (round($latdepart2, 5);, il faut extraire les données qui correspondent à la bonne taille d'agglomération.

Re: Mise à jour données / variables dans plusieurs fonctions

par chaosad2 » 03 janv. 2023, 22:46

Dans getadress, J'ai substitué à $latnominatim et $lonnominatim respectivement $latdepart2 et $londepart2.

Re: Mise à jour données / variables dans plusieurs fonctions

par or 1 » 03 janv. 2023, 22:40

testé quoi ? placé où ?

Re: Mise à jour données / variables dans plusieurs fonctions

par chaosad2 » 03 janv. 2023, 22:30

Oui, j'ai testé, mais cela n'affiche rien.
Pas d'erreur, mais un blanc.

Re: Mise à jour données / variables dans plusieurs fonctions

par or 1 » 03 janv. 2023, 22:09

"Problème : J'aimerais utiliser à la place de ces nombres les variables de ma fonction initiale ($latdepart2 et $londepart2).
Mais là, ça ne fonctionne pas."
qu'est qui a été testé pour que ce ne soit plus
$addr = getAddress($latnominatim,$lonnominatim);
mais $latdepart2 et $londepart2 ?

Re: Mise à jour données / variables dans plusieurs fonctions

par chaosad2 » 03 janv. 2023, 22:04

Bonsoir,
Je pensais en avoir mis suffisamment, désolé ! :-)
Pour être complet, il s'agit d'un fichier functions.php de wordpress.
Le voici :

Code : Tout sélectionner

<?php //MISE A JOUR DES CHAMPS add_action( 'acf_frontend/save_post', 'update_acf_field_value'); require_once('gpx_converter/parseGpx.php'); function update_acf_field_value(){ $url = get_field('fichier_gpx', $post->ID)['url']; $gpxStr = file_get_contents($url); $r = parseGpx($gpxStr); //print_r (parseGpx($gpxStr)); $lenght = $r->distance; $lenght2 = ceil($lenght); $d_plus = $r->d_plus; $d_plus2 = ceil($d_plus); $d_moins = $r->d_moins; $d_moins2 = ceil($d_moins); $z_min = $r->z_min; $z_min2 = ceil($z_min); $z_max = $r->z_max; $z_max2 = ceil($z_max); $latdepart = $r->latwpt1; $londepart = $r->lonwpt1; $latdepart2 = number_format($latdepart, 5); $londepart2 = number_format($londepart, 5); update_field('distance',$lenght2); update_field('denivele_positif',$d_plus2); update_field('denivele_negatif',-$d_moins2); update_field('altitude_min',$z_min2); update_field('altitude_max',$z_max2); update_field('latitude_depart',$latdepart2); update_field('longitude_depart',$londepart2); } //FIN MISE A JOUR DES CHAMPS //NOMINATIM $latnominatim = 47.5; $lonnominatim = 4.5; require_once('gpx_converter/nominatim.php'); //FIN NOMINATIM ?>
Toute la partie "mise à jour des champs ACF" fonctionne bien (même si peut-être mon code est-il perfectible, je débute seulement).

Quant au code du fichier nominatim.php, le voici en intégralité :

Code : Tout sélectionner

<?php function getAddress($RG_Lat,$RG_Lon) { $json = "https://nominatim.openstreetmapPOINTorg/reverse?format=jsonv2&lat=".$RG_Lat."&lon=".$RG_Lon."&zoom=10&addressdetails=1"; $ch = curl_init($json); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0"); $jsonfile = curl_exec($ch); curl_close($ch); $RG_array = json_decode($jsonfile,true); return $RG_array['address']['village']; //$RG_array['display_name']; //$RG_array['address']['country']; } $addr = getAddress($latnominatim,$lonnominatim); echo "Adresse : ".$addr; ?>
Comme je le disais, avec les coordonnées GPS

Code : Tout sélectionner

$latnominatim = 47.5; $lonnominatim = 4.5;
J'ai le bon nom de ville qui s'affiche.

Alors que j'aimerais désormais que ce soit la ville correspondant aux coordonnées $latdepart2 et $londepart2 de la fonction.
Je suis en phase de bricolage / test / essai...
A terme, j'aimerais qu'un champ ACF se mette à jour avec

Code : Tout sélectionner

update_field('départ',$addr);
à la fin de la fonction initiale.

En espérant être clair ! ;-)

Re: Mise à jour données / variables dans plusieurs fonctions

par or 1 » 03 janv. 2023, 20:58

il nous faudrait le code du test pour voir ce qui ne va pas.

Mise à jour données / variables dans plusieurs fonctions

par chaosad2 » 03 janv. 2023, 16:41

Bonjour,
J'ai des difficultés à mettre à jour un champ en utilisant la variable utilisée dans une fonction.

Code : Tout sélectionner

... function update_acf_field_value(){ $url = get_field('fichier_gpx', $post->ID)['url']; $gpxStr = file_get_contents($url); $r = parseGpx($gpxStr); .... $latdepart2 = number_format($latdepart, 5); $londepart2 = number_format($londepart, 5); ... update_field('latitude_depart',$latdepart2); update_field('longitude_depart',$londepart2); }
J'ai, plus loin dans mon fichier, le code suivant pour rechercher une adresse via Nominatim Reverse depuis ses coordonnées géographiques :

Code : Tout sélectionner

//NOMINATIM $latnominatim = 47.5; $lonnominatim = 4.5; require_once('blablabla/nominatim.php'); //FIN NOMINATIM
Le fichier nominatim.php contient quant à lui le code suivant :

Code : Tout sélectionner

function getAddress($RG_Lat,$RG_Lon) { $json = "https://nominatim.osmpointorg/reverse?format=jsonv2&lat=".$RG_Lat."&lon=".$RG_Lon."&zoom=10&addressdetails=1"; $ch = curl_init($json); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0"); $jsonfile = curl_exec($ch); curl_close($ch); $RG_array = json_decode($jsonfile,true); return $RG_array['display_name']; //$RG_array['address']['city']; //$RG_array['address']['country']; } $addr = getAddress($latnominatim,$lonnominatim); echo "Address: ".$addr;
Tout fonctionne parfaitement (c'est à dire que mon adresse est affichée) quand j'utilise dans le premier fichier des nombres (/$latnominatim = 47.5; et $lonnominatim = 4.5;)

Problème : J'aimerais utiliser à la place de ces nombres les variables de ma fonction initiale ($latdepart2 et $londepart2).
Mais là, ça ne fonctionne pas.
Je crois savoir que les variables ne sont pas globales et sont dédiées à la fonction où elles sont mises en oeuvre.
Il me semble également avoir compris qu'on pouvait utiliser des variables de manière transversale, c'est à dire d'une fonction à une autre, voire les "transférer".
Je suis novice et les différentes options que j'ai testées n'ont pas abouti.
Je tourne autour sans résultat.
A l'aide !
Merci d'avance.