Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Использование нескольких XML


Автор: yalo 27.7.2012, 06:16
Здравствуйте.
У меня такой вопрос. Я только начала пробовать изучать технологию php+xml+xslt. Имею на руках дизайн и верстку в html.
Сайт обычной сложности, не слишком сложный, но и не совсем чтоб примитивный. Обычный сайт  для продажи косметики разных производителей. Примерная схема такая его:

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ШАПКА (логотип + поле поиска по сайту + рисунок корзины с подписью сколько в ней товара, НЕ ИЗМЕНЯЕТСЯ (не считая количества товаров в корзине..))

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ГОРИЗОНТАЛЬНОЕ МЕНЮ (на всю ширину сайта, НЕ ИЗМЕНЯЕТСЯ)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ВЕРТИКАЛЬНОЕ МЕНЮ         |    СОДЕРЖИМОЕ ТЕКУЩЕЙ СТРАНИЦЫ (изменяется)
(имеет                                  |
уровни вложенности,          |
ИЗМЕНЯЕТСЯ)                       |

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ПОДВАЛ (контакты + краткое горизонтальное меню, НЕ ИЗМЕНЯЕТСЯ)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Кое-что сама уже разумеется почитала, и что такое xml, и что такое xslt, общую схему на простых примерах схватила, например на таком:
Код

// Вывод кода HTML в виде текста
header('Content-Type: text/plain;');

// Объект исходного XML-документа
$xml = new DOMDocument(null, 'windows-1251');
$xml->load('test.xml');

// Объект стиля
$xsl = new DOMDocument(null, 'windows-1251');
$xsl->load('test.xsl');


// Создание парсера
$proc = new XSLTProcessor();

// Подключение стиля к парсеру
$proc->importStylesheet($xsl);

// Обработка парсером исходного XML-документа
$parsed = $proc->transformToXml($xml);

// Вывод результирующего кода
echo $parsed;  // НА ЭТОМ МЕСТЕ, ПРАВДА, ОТКРЫВАЕТСЯ В БРАУЗЕРЕ СЛОВНО БЛОКНОТОМ.. НЕ ПОЙМУ ПОЧЕМУ

// Запись файла с результирующим кодом
file_put_contents('myparsed.html', $parsed); // А ЕСЛИ ЭТОТ ФАЙЛ ОТКРЫТЬ ПОТОМ БРАУЗЕРОМ, ТО ВСЕ ОК..  ПОЧЕМУ ТОГДА ЧЕРЕЗ ECHO НЕ ПОЛУЧАЕТСЯ ВЫВЕСТИ ТОЖЕ САМОЕ?


В целом пример заработал (правда, некоторые нюансы указала в последних комментариях кода), но вот я, глядя на свой макет, понимаю, что не хочется, чтобы мой пхп генерил для каждой страницы по 10 раз то, что и так уже будет всегда статично (горизонт. меню, подвал, даже почти вся шапка (но ее ведь тоже можно разбить на две части - изменяемая и не изменяемая)). Хочется иметь что-то типа: header_st.xml, header_dyn.xml, menu_st.xml, menu_dyn.xml, content.xml, footer.xml, а для парсинга как-то их все учитывать.. Гуглила темы на сайте, что-то похожее нашла, где посоветовали использовать xinclude, сделала по мануалу, но не заработало, и я вот уже думаю, что может как-то по-другому лучше делать, без xinclude? С xinclude выдавалась ошибка:
Namespace prefix xi on include is not defined in Entity.

Автор: krypt3r 27.7.2012, 06:57
Что-то код у вас какой-то странный местами.
1. Это
Код

$xml = new DOMDocument(null, 'windows-1251');

заменить на стандарт
Код

$xml = new DOMDocument('1.0', 'utf-8');

и юзать соответствующую кодировку в проекте.
2.
Код

// Обработка парсером исходного XML-документа
$parsed = $proc->transformToXml($xml);

Почитайте, что делает transformToXml(). Думаю, вам нужно что-то типа
Код

$parsed = $proc->transformToDoc($xml)->saveHTML();

3.
Цитата

// НА ЭТОМ МЕСТЕ, ПРАВДА, ОТКРЫВАЕТСЯ В БРАУЗЕРЕ СЛОВНО БЛОКНОТОМ.. НЕ ПОЙМУ ПОЧЕМУ

Это неудивительно, у вас же написано первой строкой, что нужно обрабатывать как text/plain. Если хотите человеческого вывода разметки HTML в браузер, укажите text/html

Добавлен аттач. Пример использования связки PHP+XML+XInclude+XSLT

Автор: yalo 29.7.2012, 09:04
krypt3r, спасибо большое. Посмотрела пример - мне кажется, это то, что мне нужно:) Надо правда еще поизучать файл index.xsl, с xml у меня получше дела, а вот с xslt сложнее, но я посмотрела - по xslt теория даже в википедии есть:) Но если что - ожидайте вопросов;) Спасибо:)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)