![]() |
| ||||||||||||||
|
Создание HTML с помощью PHP и XML10 ноября 2007 Всем хорошо известно как генерировать HTML код с помощью PHP.
<html>
<body>
<p>Каталог товаров</p>
<table>
<?
$data = array(
0 => array("Авто", 23),
1 => array("Компьютеры", 145),
2 => array("Книги",1056),
3 => array("Бытовая техника",543)
);
foreach($data as $i=>$c) {
echo "<tr><td>$c[0]</td><td>($c[1])</td></tr>";
}
?>
</table>
</body></html>
Однако такой способ годится только в том случае когда сайт делает один человек знающий PHP и HTML. В жизни такое бывает редко. Большинство компаний, занимающихся разработкой сайтов, имеет в своём штате как минимум двух специалистов — программиста и HTML кодера. В этом случае они не могут работать с один файлом и на помощь приходит технология HTML-шаблонов. Существует много различный реализаций (библиотек) этой технологии. Самая простейшая, входящая в дистрибутив PHP — HTML_Template_IT. Вот пример её применения:
<?php
require_once("HTML/Template/IT.php");
$tpl = new HTML_Template_IT('.');
$tpl->loadTemplatefile ('catalog.tpl.html', true, true);
$data = array(
0 => array("Авто", 23),
1 => array("Компьютеры", 145),
2 => array("Книги",1056),
3 => array("Бытовая техника",543)
);
foreach($data as $i=>$c) {
$tpl->setCurrentBlock("catalog_item");
$tpl->setVariable("NAME", $c[0]);
$tpl->setVariable("NUMBER", $c[1]);
$tpl->parseCurrentBlock();
}
$tpl->show();
?>
Файл catalog.tpl.html
<html>
<body>
<p>Каталог товаров</p>
<table>
<!-- BEGIN catalog_item -->
<tr><td>{NAME}</td><td>{NUMBER}</td></tr>
<!-- END catalog_item -->
</table>
</body></html>
Теперь казалось бы всё хорошо. Каждый работает со своим файлом. Программист с PHP кодом, HTML кодер с HTML кодом. Однако множество разных библитек HTML шаблонов, отличающихся своими возможностями, правилами составления шаблона, кодирования делают работу программиста и HTML кодера излишне трудной. Решением этой проблемы — использование вместо шаблонов технологии XML. Последняя, хороша тем, что является стандартом для электронных публикаций разработанным World Wide Web Консорциумом. Она даёт возможность разделить в электроном документе данные от их представления что позволяет создавать различные виды представлений документа для разных программ и устройств. PHP имеет поддержку технологии XML. Переведём приведённый выше пример на XML. Сперва нужно определиться со структорой XML документа. В данном случае она следующая: <?xml version="1.0"?> <page> <catalog> <item name="Авто" number="23"/> <item name="Компьютеры" number="145"/> <item name="Книги" number="1056"/> <item name="Бытовая техника" number="543"/> </catalog> </page> Мы не будем здесь объяснять принципы построения XML, достаточно понимать что имена тэгов здесь не имеют такого принципиального значения как в HTML, они могут быть любыми. Важна лишь структура самих XML тэгов. Теперь, что касается представления данного XML документа. Для преобразования XML документа в HTML документ нам потребуется составить ещё один XML документ — XSL документ. XSL предназначен как раз для таких преобразований. Вот нужный нам XSL документ: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="page"> <html> <body> <p>Каталог товаров</p> <xsl:apply-templates select="catalog"/> </body></html> </xsl:template> <xsl:template match="catalog"> <table> <xsl:for-each select="item"> <tr> <td><xsl:value-of select="@name"/></td> <td><xsl:value-of select="@number"/></td> </tr> </xsl:for-each> </table> </xsl:template> </xsl:stylesheet> Здесь нужно заметить что HTML код в XSL документе должен удовлетворять требованиям XML документа. А имеено, все HTML тэги должны иметь свои закрывающие, а аттрибуты тэгов заключаться в кавычки. Такой HTML код является кодом стандарта XHTML. Теперь, PHP код для генерации XML документа с преобразованием его с помощью XSL в HTML.
<?php
$xml = DOMDocument::load("catalog.xml");
$xsl = new XSLTProcessor();
$xsl->importStyleSheet(DOMDocument::load("catalog.xsl"));
echo $xsl->transformToXML($xml);
?>
Если данные находятся не в XML документе а берутся из PHP скрипта:
<?php
$data = array(
0 => array("Авто", 23),
1 => array("Компьютеры", 145),
2 => array("Книги",1056),
3 => array("Бытовая техника",543)
);
$xml = DOMDocument::load("catalog.xml");
$xpath = new DOMXPath($xml);
$node = $xpath->query("//page/catalog")->item(0);
foreach($data as $c) {
$tag = $xml->CreateElement("item");
$tag->setAttribute("name", $c[0]);
$tag->setAttribute("number", $c[1]);
$node->appendChild($tag);
}
$xsl = new XSLTProcessor();
$xsl->importStyleSheet(DOMDocument::load("catalog.xsl"));
echo $xsl->transformToXML($xml);
?>
В этом случае XML документ упростится. <?xml version="1.0"?> <page> <catalog/> </page> В итоге мы имеет 3 файла: catalog.php, catalog.xml, catalog.xsl. Итак, перед тем как начать работу, PHP программист и HTML кодер должны только договориться о структуре XML документа, после чего они могут работать независимо. Использование XSL даёт много возможностей для HTML кодера по представлению документа. Некоторые из них просто не доступны в HTML шаблонах. Здесь как различные фунции преобразования аттрибутов тэгов:
Так и выражения ветвления и цикла характерные для языков программирования: В заключение, ссылки для тех кто хочет познакомиться с XML, XSL поближе. |
|