8768 sujets

Développement web côté serveur, CMS

Bonjour à tous, je bataille sur un truc assez bateau, j'ai une fonction qui affiche le noeud d'un xml, dont une partie est composé par une variable (appel de la fonction plus bas) et je parviens pas à faire fonctionner tout ca.
function lngF ($noeud) {
	global $lng;
	global $langue;
	return $lng->{$noeud}[$langue];
}

<?=lngF('entete->titre')?>

$lng est mon objet simpleXML, $langue est une chaine qui prend le nom de la langue ("fr" pour l'exemple).
Evidement, en mettant "en dur" tout ce petit monde dans la fonction, ca fonctionne.

J'imagine que c'est un truc simple, si quelqu'un pouvais m'éclairer, je lui en serait éternellement reconnaissant. Smiley smile
Bonjour,

Actuellement ta fonction essaye d'accéder à la propriété nommée 'entete->titre' de l'objet $lng, or cet objet doit posséder une propriété 'entete' qui est elle même un objet SimpleXMLElement qui possède une propriété 'titre'.
Un exemple simple pour illustrer :
$lng = new stdClass;
$lng->{'entete->titre'} = 'Mon titre';
echo $lng->{'entete->titre'}; // Mon titre
echo $lng->entete->titre; // Warning: Undefined property: stdClass::$entete


Tu peux essayer de décomposer les noeuds de ton paramètre avec explode (code non testé) :
function lngF($chemin) {
	global $lng;
	global $langue;

	$noeuds = explode('->', $chemin);
	$element = $lng;
	foreach ($noeuds as $noeud) {
		$element = $element->$noeud;
	}

	return $element[$langue];
}

Modifié par Pitet (09 Aug 2022 - 23:08)
Meilleure solution
Ah purée ! Le pire c'est que j'avais eu l'idée à un moment de procéder comme tu propose, puis à force d'enchainer les tentatives en essayant de faire vite cette axe m'était complètement sorti de la tête.

Ca fonctionne parfaitement en tout cas (et ca reste simple), alors un énorme merci Pitet. Smiley cligne