Фабрика Хостинга
Главная  |  Оплата  |  Почта  |  Домены  |  Партнёрам  |  Справочный центр  |  О компании
  • Открытие аккаунта через 10 минут
  • Бесплатный тестовый период на 15 дней
  • Демо-вход в панель управления
  • Возврат денег в любое время
Email_support support@hostfabrica.ru
Skype_support hostfabrica
ICQ_support 286-247-389
Jabber_support hostfabrica@gmail.com
Логин
Пароль 
 безопасное соединение
напомнить пароль
RU  200 рублей
SU  550 рублей
EU  500 рублей
DE  600 рублей
US  300 рублей
KZ  550 рублей
BIZ  300 рублей
NET  300 рублей
COM  300 рублей
ORG  300 рублей
TEL  450 рублей
ASIA  500 рублей
INFO  300 рублей
NAME  300 рублей
MOBI  450 рублей
Проверить домен:
 Конструкторы сайтов:

Создание HTML с помощью PHP и XML

10 ноября 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 шаблонах. Здесь как различные фунции преобразования аттрибутов тэгов:

  • булевые — boolean(),true(),false()
  • арифмитические — number(),+,-,*,/,div(),mod(),sum(),floor(),ceiling(),round()
  • строковые — string(),concat(),substring-before(),substring-after(),substring(),translate()

Так и выражения ветвления и цикла характерные для языков программирования: if, choose, when, for-each.

В заключение, ссылки для тех кто хочет познакомиться с XML, XSL поближе.

 Публичная офертаwww.webmoney.ruЯ принимаю Яндекс.ДеньгиPayPalRBK Money ООО «Фабрика Хостинга»
с 2006 года