Работа PHP в XSL

Valentin

Новичок
XSLT: вставка php в xsl шаблоны

Привет, Всем! Я к вам с вопросом и за советом и ответом :)

Возникла идея, и хотелось её реализовать на XSL, пишу модуль.
Т.к. времени для реализации очень мало, я не успеваю выучить досконально грамматику
XSL.

Одна из функций модуля должна возвратить результат - строку html, со вставкой PHP.
Строка Html будет результатом обработки XSL-шаблона и XML-данных.
Как можно сделать наличие php-кода в XSL-шаблоне :)

То, что я пробовал:
втулил php в xsl
PHP:
<?=$ostream;?> и <?php echo $ostream;?>
, не сработало.

Для динамического создания XML и работы с XSL, использую класс DOMDocument.

PHP:
...
$elem = $m_dom->createElement("header",'<?php include("header.html");?>');
...
не сработало.

Вопрос: проблемма с Namespaces xmlns:xsl и тегами "<?php" "<?=" ???

P.S.: Явно что-то можно придумать :) но я пока тёмный. Если кто-либо знает правильный
ответ, то поделитесь вашими реализациями. поучусь :)

Заранее Спасибо.
 

cray

Guest
Для этой темы, правда, есть отдельный форум....
По поводу решения:
как вариант, можно использовать секцию CDATA

-~{}~ 12.07.05 02:15:

Вот это должно прокатить
PHP:
<![CDATA[<?php echo $ostream;?>]]>
и это тоже
PHP:
<![CDATA[<?=$ostream;?>]]>
Только скажи, зачем тебе генерить ПХП-документ из XSLT. Просто интересна ситуация. :)
 

Valentin

Новичок
Автор оригинала: cray
Только скажи, зачем тебе генерить ПХП-документ из XSLT. Просто интересна ситуация. :)
Ситуация такая. Хочу сделать себе простенький Фреймворк
Сейчас начал делать модуль для работы с шаблонами, из которых будут "компилиться" страницы.

Шаблонов для html страниц будет несколько, т.е. много, на любой вкус. Все они изначально создаются в xsl-templates +xml.

Дальше, в xml файлах будет храниться информация об областях - areas, на которые дизайнер условно разбил шаблон страницы: те же header, footer, left, right, center, и т.д. любое название области, хоть hex :)

Имеем такой каталог с шаблонами... например:

.
..
index.xsl
index.xml
index1.xsl
index1.xml
...

и типа xml:

<area>
<name>Menu</name>
<что-то ещё />
</area>
<area>
<name>Menu</name>
<что-то ещё />
</area>
...

В эти области должны будут юзеры вставлять различные динамические и статические модули/блоки которые содержат контент или работают с данными, типа : news, text_module, text_ang_image, и т.д menu ...

То есть пользователь будет настраивать блоки/модули, расстанавливать их на странице по своему вкусу... Захочет новости ляпнет вместо headera... Вобщем, на вкус каждый будет извращаться так, как захочет.

А теперь... самое главное для вывода блоков в области страницы мне и нужен вспомагательный php-код, типа:
Код:
<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
...
<tr>
   <td>
PHP:
<?php
foreach($blocks[$area["name"]] as $id => $content)
{
   echo $content."<br />";
}
?>
Код:
   </td>
</tr>
...
</xsl:template>
</xsl:stylesheet>
Протянуть PHP-код через XSLT и вывести его в HTML-строку - этого я сегодня и не смог реализовать - не знаю как, не читал, искал - не нашёл. Логика работы с областями шаблона страницы в PHP уже готова.

З.Ы.: Мне известно как это делается в обыкновенных html-шаблонах. Я нехочу использовать в этом проекте Smarty и Ко.
Я хочу хоть раз сделать проект с использованием шаблонов на XML и XSL. Захотел позавчера :D

-~{}~ 12.07.05 03:25:

Автор оригинала: cray
PHP:
<![CDATA[<?=$ostream;?>]]>
Cекция CDATA - в результате в html
PHP:
<td><![CDATA[<?=$ostream;?>]]></td>
в таком же виде
:( Жаль. Может что-то не так?
Хотелось бы вот фффф таком виде получить
PHP:
<td><?=$ostream;?></td>
...
 

[DAN]

Старожил PHPClub
Valentin, абсолютно неправильно понимаешь технологии.
Мой тебе совет - почитай все-таки документацию, найди время.
Сейчас ты такой огород городишь, что аж страшно за будущее становится.
 

cray

Guest
Чесслово, подход оригинальный... уж черезчур...
Не проще ли генерить XML-ки в PHP, а потом с XSLT их трансформить?
Я как раз начинал писать для себя такой XML-based фрэймворк. Вот на днях додумал, как его делать дальше и буду продолжать.
 

Valentin

Новичок
Автор оригинала: cray
Вот на днях додумал, как его делать дальше и буду продолжать.
Ладно :) Да я и сам обалдел, как до такого мог додуматься :) в 3 часа ночи. Буду думатьссс.. ;)
 

cray

Guest
Если все-таки решишь делать по-своему, ну или просто для общего развития, то CDATA нужно вставлять так
PHP:
<xsl:text disable-output-escaping="yes"><![CDATA[<?=$ostream;?>]]></xsl:text>
или, в принципе, можно обойтись без него:
PHP:
<xsl:text disable-output-escaping="yes">&lt;?=$ostream;?&gt;</xsl:text>
 
Сверху