2016-05-05 2 views
0

Я пытаюсь показать значок темы по xml.Получить атрибут по теме-> icon_id

Как я могу получить значок справа от значка значка. Теперь он всегда загружает id 0.

Благодарим за помощь.

Я попробовал и искал предложенные примеры, но не повезло.


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

Откуда: $ topicicontype? почему это в верхнем регистре для B2/B3, а FontAwesome - в нижнем регистре? Почему вы переписываете $ icon сразу после получения атрибутов? Просто извлеките эту информацию в простые переменные или используйте напрямую. – moped

+0

$ topic-> icon_id происходит из таблицы базы данных. Если значок значка темы сохраняется, сохраните тему. Нет причин для прописных букв, я добавил прописную букву для лучшего просмотра. Не могли бы вы привести мне пример, что, по-вашему, может быть лучше. – 810

+0

Это будет работать. Я просто не вижу причин создавать объект (и перезаписывать существующий) только для распечатки некоторых переменных, поэтому вместо '' Я бы использовал только '' '..чек мой ответ, может быть, это поможет – moped

ответ

0

Я просто попытался var_dump/print_r объект и, кажется, что он не загружает корневой элемент с его именем, так проверяя его название (требуется php 5.1.3)

EDIT: так что, если я правильно понимаю, вы хотите вернуть только значок, который равен $topicicon = $topic->icon_id, так что вот обновленный код

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

нет, это не работает для меня. – 810

+0

Что именно не работает для вас? Я попробовал это на своем локальном хосте, и он напечатал 5 значков. Или вы хотите вернуть только один значок? – moped

+0

обновил ответ, так что теперь он возвращает только значок с определенным идентификатором благодаря фильтру xpath (он всегда возвращает массив, поэтому $ icon [0] – moped