За последние 24 часа нас посетили 51618 программистов и 1758 роботов. Сейчас ищут 834 программиста ...

Помогите разобраться!!! Вызов функции PHP из XSLT.

Тема в разделе "Прочие вопросы по PHP", создана пользователем bogong, 17 янв 2012.

  1. bogong

    bogong Активный пользователь

    С нами с:
    20 май 2010
    Сообщения:
    114
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Есть код PHP:
    Код (Text):
    1.  
    2. <?php
    3. header("Content-type: text/html; charset=utf-8");
    4.  
    5. $xml = <<<EOB
    6. <allusers>
    7.  <user>
    8.   <uid>bob</uid>
    9.  </user>
    10.  <user>
    11.   <uid>joe</uid>
    12.  </user>
    13. </allusers>
    14. EOB;
    15. $xsl = <<<EOB
    16. <?xml version="1.0" encoding="UTF-8"?>
    17. <xsl:stylesheet version="1.0"
    18.      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    19.      xmlns:php="http://php.net/xsl">
    20. <xsl:output method="html" encoding="utf-8" indent="yes"/>
    21.  <xsl:template match="allusers">
    22.   <html><body>
    23.     <h2>Users</h2>
    24.     <table>
    25.     <xsl:for-each select="user">
    26.       <tr><td>
    27.         <xsl:value-of select="php:function('ucfirst',string(uid))"/>
    28.         <xsl:value-of select="php:function('test')"/>
    29.       </td></tr>
    30.     </xsl:for-each>
    31.     </table>
    32.   </body></html>
    33.  </xsl:template>
    34. </xsl:stylesheet>
    35. EOB;
    36.  
    37. function test(){
    38.     echo 'Тестовая функция';
    39. }
    40.  
    41. $xmldoc=new DOMDocument();
    42. $xmldoc->loadXML($xml);
    43. $xsldoc=new DOMDocument();
    44. $xsldoc->loadXML($xsl);
    45.  
    46. $proc = new XSLTProcessor();
    47. $proc->registerPHPFunctions();
    48. $proc->importStyleSheet($xsldoc);
    49. echo $proc->transformToXML($xmldoc);
    50.  
    51. ?>
    Вопрос::Когда вызываются стандартные функции PHP - все в порядке ..., когда я пытаюсь вызвать пользовательскую функцию, он делает вывод не там где нужно, а перед всеми тэгами!!!! Помогите разобраться в чем тут соль???? Гуглю эту тему третий день ... Мозг взрывается!!! Спасайте.
     
  2. yuri

    yuri Активный пользователь

    С нами с:
    16 янв 2012
    Сообщения:
    288
    Симпатии:
    2
    видимо этот код обрабатывается до вывода всего документа, нужно смотреть систему в целом...
    ну или извращаться с ob_start() ...
     
  3. bogong

    bogong Активный пользователь

    С нами с:
    20 май 2010
    Сообщения:
    114
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Это понятно что перед всем ..., непонятно как заставить его во время срабатывать ... И заставить его нужно не средствами PHP а средствами XSLT ..., в моем случае PHP выступает как сборщик и не более ... Вся логика лежит в XSLT ...
     
  4. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    не echo а return
     
  5. bogong

    bogong Активный пользователь

    С нами с:
    20 май 2010
    Сообщения:
    114
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    заработало ..., огромное спасибо :)))
    а в чем разница в данном случае??? почему return ставит на место а echo фигней страдает???
     
  6. yuri

    yuri Активный пользователь

    С нами с:
    16 янв 2012
    Сообщения:
    288
    Симпатии:
    2
    440hz - респект :)
    echo пишет в вывод а return ни чего не пишет а возвращает значение тому, кто вызвал ф-цию.