Définitions introuvables

guimers8guimers8 Member
Bonjour,

Je suis en train de bidouiller un peu PluxmlBlogBêta (bon je crache le morceau, je développe un système de plugins). Je cherche à parser un fichier XML, et je cherche donc les déclarations des variables $array, $valeurs, et $index_tags. Je ne les trouve pas ! :o

Ou sont-elles ?
Merci ! ;)

Réponses

  • Normal, ces variables sont utilisées comme des références : http://fr2.php.net/manual/fr/language.references.php
  • Si j'ai bien compris, ca correspond aux pointeurs en C, c'est ça ? (si tu connais)

    En fait, je voudrais parser un fichier XML, et donc avoir un équivalent de $index_tags, c'est à dire $index_tags.
    En fait, je ne comprend pas le fait de ne retrouver ces variable nulle pas d'autre que dans class.pluxml.php.
  • J'ai jamais touché au C, je peux pas te dire.

    C'est pas évidant a expliquer ce système de références, essaie de lire la doc sur le déparseur Xml de php.
  • Disons que je veut parser un fichier XML comme :
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <document>
        <plugin url="plugins/plugin1">NomDuPlugin1</categorie>
        <plugin url="plugins/plugin2">NomDuPlugin2</categorie>
    </document>
    
    Ma fonction de parsage est :
    function getPlugins($url_file)
    	{
    		$data = implode("",file($url_file));
    		$parser = xml_parser_create('ISO-8859-1');
    		xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
    		xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
    		xml_parse_into_struct($parser,$data,$valeurs,$index_tags);
    		xml_parser_free($parser);
    
    		if(isset($index_tags['categorie']))
    		{
    			for($i=0;$i < count($index_tags['categorie']);$i++)
    			{
                    $array[$valeurs[$index_tags['plugins'][$i]]['attributes']['number']]['name']
    				= $valeurs[$index_tags['plugins'][$i]]['value'];
    
                    $array[$valeurs[$index_tags['plugins'][$i]]['attributes']['number']]['url']
    				= $valeurs[$index_tags['plugins'][$i]]['attributes']['url'];
    			}
    		return $final;
    		}
    	}
    
    La structure de données retournée doit être de la même forme que aCats. J'ai une erreur lors d'un foreach sur ce que j'ai parsé, donc c'est que ma fonction n'est pas bonne. Pas vraiment évident, j'ai jamais codé avec XML en PHP. :p

    Merci.
  • iKsiKs Member
    Juste une petite précision : de ce que je sais de PHP et de ce que je sais du C, les pointeurs ne sont pas des références.

    Ici je pense que Skyline parle de passer des variables par référence (?) et donc que la variable modifiée dans la fonction l'est gloablement (ça évite de devoirretourner une variable).

    Les pointeurs sont des pseudo-variables (je sais pas vriament comment dire) qui indique l'emplacement d'une variable en mémoire. Cela n'existe à priori pas en PHP.

    En éspernat que tu trouvera ton bonheur ;)
  • Si une référence sert à modifier la même variable dans une fonction et globalement, je cerne mal la différence avec les pointeurs.. :o
  • iKsiKs Member
    Hum en effet l'intérêt doit être le même mais l'utilisation est différente.. Non ?
    Tu as peut-être raison, mais en tout cas ce que j'ai dit est vrai, c'est déjà ça :p
  • Bah, pour moi c'est le même but, et la même utilisation : deux variables différentes qui sont en fait des pointeurs (raccourcis) vers la variable d'origine..
  • Fais attention tu as écrits tantot "plugin" et tantot "plugins" le probleme vient surement de là.
  • Problème réglé pour le moment. Merci. :)
  • DitiDiti Member
    En passant, j'insiste sur le fait que « plugin » est un mot anglais, et que le mot utilisé dans la communauté française sera « extensions ».
    N'oublie pas qu'il y a plusieurs sens pour un seul mot :D

    [Insérer ici l'image « poor_vulpix » avec « Get the latest Firefox plugins »]

    PS : J'adore ton tutoriel sur GTK, j'apprends le C rien que pour ça :)
  • BalouBalou Member
    Diti a écrit:
    En passant, j'insiste sur le fait que « plugin » est un mot anglais, et que le mot utilisé dans la communauté française sera « extensions ».
    Oui Diti, il y a aussi "greffon" qui est aussi très utilisé dans la communauté française ;)
  • Soit, je comprend tout à fait, et je t'encourage d'ailleurs à prôner le français tant que possible, c'était juste mes réflexes qui ont tendance à me faire parler anglais ! ^^ Mais pour l'instant, je veut développer la fonctionnalité du système d'extensions, si mon système marche, et qu'il est adopté ou utilisé en partie par Pluxml, on changera le mot bien sur ! ;)

    J'ai à peu près compris comment marche le parseur PHP, et ma fonction marche désormais correctement, à un point près : il ne charge que le premier élément du fichier ! :/
    Si quelqu'un voit un problème dans mon code :
    function getPlugins($url_file)
    {
    	$data = implode("",file($url_file));
    	$parser = xml_parser_create('ISO-8859-1');
    	xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
    	xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
    	xml_parse_into_struct($parser,$data,$valeurs,$index_tags);
    	xml_parser_free($parser);
    
    	if(isset($index_tags['plugin']))
    	{
    		for($i=0;$i < count($index_tags['plugin']);$i++)
    		{
    			$array[$valeurs[$index_tags['plugin'][$i]]['attributes']['number']]['name']
    			= $valeurs[$index_tags['plugin'][$i]]['value'];
    				
    			$array[$valeurs[$index_tags['plugin'][$i]]['attributes']['number']]['url']
    			= $valeurs[$index_tags['plugin'][$i]]['attributes']['url'];
    		}
    	return $array;
    	}
    }
    
    Merci de votre aide ! :)

    PS : Merci pour le compliment, il me fais très plaisir et j'en ferais part à mes coéquipiers. ;)
  • DitiDiti Member
    Exact, je pense qu'on devrait utiliser ce dernier terme, « extensions » faisant plus penser à quelque chose qui deviendrait de plus en plus grand, tandis que « greffon » représente une fonctionnalité qui vient... se greffer au Pluxml existant :)
  • iKsiKs Member
    Je préfère également greffon même si c'est moins naturel et je remercie Diti et guimer8 pour m'avoir fait découvrir ce tuto qui m'intéressera sûrement beaucoup lorsque je me mettrai sérieusement au C/C++ ^^
  • Personne ne sait pour ma fonction ?
  • Peut-etre :
    for($i=0;$i < count($index_tags);$i++)

    à la place de :
    for($i=0;$i < count($index_tags);$i++)
  • Non, ne marche pas, pourquoi cette proposition ?
    Pour lire les catégories on utilisait le même mot 'categorie' partout, là aussi ..?
  • C'était une supposition "à la volée" vu que je n'ai pas le temps de tester chez moi.
  • bonjour,

    hmm hmm , peut-etre tout bete et normal qu'il ne renvoi qu'un resultat ...

    sit u ouvre ton tag avec plugin , pourquoi le refermé avec categorie ?
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <document>
    <plugin url="plugins/plugin1">NomDuPlugin1</categorie>
    <plugin url="plugins/plugin2">NomDuPlugin2</categorie>
    </document>
    ou bien ton code est-il correcte dans tes test ?

    cordialement :)

    GC
Connectez-vous ou Inscrivez-vous pour répondre.