Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > php+xml+xslt+mysql


Автор: AlexanderWhite 5.8.2006, 11:35
Меня интересует вопрос! Как реализовать шаблонизацию веб проекта на базе php+xml+xsl+mysql. Интересуют конкретные решения, то есть связь файлов, их расположение, содержимое. Решение должно быть универсальным, легко конфигурируемым, перенастраиваемым, дополняемым.

Автор: RoDeX 5.8.2006, 12:08
Ну есть  специальная фича для создания динамичных шаблонов - Smarty называется... smile 

Автор: AlexanderWhite 5.8.2006, 14:17
Ну что такое смарти я знаю smile просто предпологается хранить контент в xml.

Автор: Хоббит 15.8.2006, 10:16
а что сложного в устройстве шаблонов на XSL  .... google и читать про XSLT ....
А если тебя интересует концепция устройства cms ок, то грузи себе опесоурцевские cms ставь и смотри... лучше тебе никто не предложит. Сколько людей столько и мнений

Автор: BlackTheMad 16.8.2006, 12:23
Вот только рекомендую учесть ряд проблем.

1) XSLT-трансформации на стороне пользовательских браузеров выполняются не всегда так, как тебе этого хочется (больше всего проблем будет с Opera).
2) XSLT-трансформации это всё же достаточно трудоёмкий процесс для браузера.

Всё остальное - дело техники и Google ;) Удачи.

Автор: ewolf 17.8.2006, 22:23
Не обязательно обрабатывать XSLT на стороне клиента, можно и на стороне сервера, главное, чтобы был вот этот модуль в составе php
http://www.php.net/manual/ru/ref.xslt.php

Автор: IZ@TOP 23.8.2006, 10:26
Цитата(BlackTheMad @  16.8.2006,  13:23 Найти цитируемый пост)
1) XSLT-трансформации на стороне пользовательских браузеров выполняются не всегда так, как тебе этого хочется (больше всего проблем будет с Opera).
2) XSLT-трансформации это всё же достаточно трудоёмкий процесс для браузера.

Я бы не сказал что для современных браузеров на современных машинках этот процесс будет сильно трудоемким. Гораздо лучше и быстрее отдать клиенту на обработку данные, чем при одновременном запросе на сервер сотни клиентов эти работы будет проводить сам сервер.
А вот для специфичных браузеров, у которых проблемы с преобразованием, можно отдавать уже собранные данные.

Автор: Eugene_Bond 10.9.2006, 13:29
В силу трудоемкости трансформации очевидным решением кеширования является кеширование результатов трансфорамции smile

То есть:
имеем XML новости (или чего-нибудь) и шаблон для ее оторажения. Если XML и шаблон не изменялись -- результат трансформации берется прямо из кеша. Если было изменение -- трансформируем и сохраняем результат трансформации в кеш.

Наиболее узким моментом является обработка и кеширование отдельных частей страницы. Решается введением дополнительного неймспейса со своим обработчиком (фактически он и будет контроллером шаблонизатора)

Автор: c0t 27.9.2006, 16:49
сходу вот так, могут быть небольшие ошибки ибо проверить сейчас негде :o)

php4
Код

<?php
function c($str_value) 
{ 
    return @iconv("windows-1251","UTF-8",$str_value);
}

function writeresponse($xsl_f) 
{ 
$html_s=false;
$xsl_f=realpath($xsl_f);
$html_s=$GLOBALS['XML']->dump_mem();
echo ($html_s)?$html_s:"error!"; 
exit;
} 

$XML=domxml_new_doc("1.0");
$Root=$XML->create_element("root");
$XML->append_child($Root);
$Element=$XML->create_element("element");
$Element->set_attribute("attr_name",c("хеллоу ворлд!"));
$Root->append_child($Element");
unset($Element);
writeresponse("index.xsl");
?>


php5
Код

<?php
function c($str_value) 
{ 
    return @iconv("windows-1251","UTF-8",$str_value);
}
function xml2html($xsl_file)
{
$xsl_file=realpath($xsl_file);
$xsl=new DOMDocument();
@$xsl->load($xsl_file);
$proc=new XSLTProcessor();
@$proc->importStylesheet($xsl);
$ret=@$proc->transformToXml($GLOBALS['DOM']));
return $ret;
}

$DOM=new DOMDocument();
$Root=$DOM->createElement("root");
$DOM->appendChild($Root);
$Element=$DOM->createElement("element");
$Element->setAttribute("attr_name",c("хеллоу ворлд!"));
$Root->appendChild($Element);
unset($Element);
echo xml2html("index.xsl");
?>


XSL
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output doctype-system="DTD/xhtml1-transitional.dtd" doctyle-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>

<xsl:template match="root">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<title>Test</title>
</head>
<body>
<xsl:apply-templates select="element"/>
</body>
</html>
</xsl:template>

<xsl:template match="element">
<h1><xsl:value-of select="@attr_name"/></h1>
</xsl:template>
</xsl:stylesheet>

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