2016-05-05 3 views
0

J'essaie de montrer l'icône du sujet par xml. Comment puis-je obtenir l'icône de l'ID d'icône de droite. Maintenant, il est toujours en train de charger l'identifiant 0.Obtenir l'attribut par sujet-> icon_id

Merci pour votre aide.

J'ai essayé et recherché des exemples suggérés, mais pas de chance.


xml:

<icons type="user" width="48" height="48"> 
    <icon id="0" name="default" published="1" b2="file" b3="file" fa="file" src="user/default.png" /> 
    <icon id="1" name="exclamation" published="1" b2="notification-circle" b3="exclamation-sign" fa="exclamation-circle" src="user/exclamation.png" /> 
    <icon id="2" name="question" published="1" b2="question-sign" b3="question-sign" fa="question-circle" src="user/question.png" /> 
    <icon id="3" name="idea" published="1" b2="lamp" b3="lamp" fa="lightbulb-o" src="user/idea.png" /> 
    <icon id="4" name="love" published="1" b2="heart" b3="heart" fa="heart" src="user/love.png" /> 
</icons> 

php:

 $topicicon = $topic->icon_id; 
     $xmlfile = topicicons.xml'; 

     if (is_file($xmlfile)) 
     { 
      $xml = simplexml_load_file($xmlfile); 

      if (isset($xml->icons)) 
      { 
       foreach ($xml->icons as $icons) 
       { 

        foreach ($icons->icon as $icon) 
        { 
         $attributes = $icon->attributes(); 
         $icon  = new stdClass(); 
         $icon->id = (int) $attributes->id; 
         $icon->b2 = (string) $attributes->b2; 
         $icon->b3 = (string) $attributes->b3; 
         $icon->fa = (string) $attributes->fa; 
         $icon->src = (string) $attributes->src; 

         if ($topicicontype == 'B2') 
         { 
          return '<span class="icon icon-' . $icon->b2. '"></span>'; 
         } 
         elseif ($topicicontype == 'B3') 
         { 
          return '<span class="glyphicon glyphicon-' . $icon->b3 . '"></span>'; 
         } 
         elseif ($topicicontype == 'fa') 
         { 
          return '<i class="fa fa-' . $icon->fa . '"></i>'; 
         } 
         else 
         { 
          return '<img src="' . $icon->src . '" alt="topicicon" />'; 
         } 
        } 
       } 
      } 
     } 
+0

D'où vient $ topicicontype? pourquoi est-ce en majuscule pour B2/B3 alors que FontAwesome est en minuscule? Pourquoi remplacez-vous l'icône $ juste après avoir reçu les attributs? Juste extraire cette information à des variables simples ou utiliser directement. – moped

+0

$ topic-> icon_id provient d'une table de base de données. Où l'ID de l'icône de sujet est enregistré, après avoir enregistré un sujet. Il n'y a pas de raison pour les majuscules, j'ai ajouté une majuscule pour un look plus agréable. pourriez-vous me donner un exemple, ce que vous pensez qu'il peut être mieux. – 810

+0

Cela fonctionnera Je ne vois aucune raison de créer un objet (et d'en remplacer un existant) juste pour imprimer certaines variables, donc au lieu de '' J'utiliserais juste '' '..check ma réponse, peut-être que cela aidera – moped

Répondre

0

J'ai juste essayé de var_dump/print_r l'objet et il semble qu'il ne charge pas l'élément racine avec son nom, de sorte vérification de son nom (nécessite php 5.1.3)

EDIT: si je comprends bien, vous ne voulez retourner que l'icône $topicicon = $topic->icon_id, alors voici le code mis à jour

if (is_file($xmlfile)) 
{ 
    $xml = simplexml_load_file($xmlfile); 

    if (isset($xml) && $xml->getName()=="icons") 
    { 
    $icon = $xml->xpath('/icons/icon[@id='.$topicicon.']'); 
    $attributes = $icon[0]->attributes(); 
    $icon  = new stdClass(); 
    .. your conditions here 
    } 
} 
+0

non, cela ne fonctionne pas pour moi. – 810

+0

Qu'est-ce qui ne fonctionne pas exactement pour vous? Je l'ai essayé sur mon localhost et il a imprimé 5 icônes. Ou vous voulez retourner une seule icône? – moped

+0

a mis à jour la réponse, donc maintenant il ne renvoie que l'icône avec un identifiant spécifique grâce au filtre xpath (il retourne toujours array, donc $ icon [0] – moped