Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
AleXp 10.06.2006 01:39
Отсюда: http://www.bitrixsoft.ru/support/forum/read.php?FID=6&TID=809&MID=3131&phrase_id=187054#message3131
Гость пишет:
Я сам изменял XSLT-шаблоны, там все очевидно (я директор по маркетингу).
До какого-то момента действительно сложного ничего нет, как собственно нет ничего сложного в редактировании обычного текстового файла. Открыть файл, поискать вхождение строки "Товаров на складе:" и заменить это на "Объем склада", например.
Но мы говорим не о статической странице, а о традиционном веб-проекте, шаблон которого становится большим и все больше напоминает обычный программный код, причем неоптимальный и ограниченный по возможностям.
Небольшой пример из XSLT шаблона на 100к:
<xsl:for-each select="/Bitrix/OfferList/rs:data/z:row">
<ПакетПредложений>
<xsl:if test="$EXTENDED='Y'">
<xsl:attribute name="ID"><xsl:value-of select="@ID"/></xsl:attribute>
</xsl:if>
<xsl:if test="not(@NEW_INFO) or @NEW_INFO='Y'">
<xsl:attribute name="ИдентификаторКаталога"><xsl:value-of select="@CATALOG_XML_ID"/></xsl:attribute>
<xsl:attribute name="Владелец"><xsl:value-of select="@XML_ID"/></xsl:attribute>
<xsl:if test="@DATE_START">
<xsl:attribute name="ДействительноС"><xsl:value-of select="substring-before(@DATE_START, 'T')"/></xsl:attribute>
</xsl:if>
<xsl:if test="@DATE_END">
<xsl:attribute name="ДействительноДо"><xsl:value-of select="substring-before(@DATE_END, 'T')"/></xsl:attribute>
</xsl:if>
<xsl:attribute name="Описание"><xsl:value-of select="@DESCRIPTION"/></xsl:attribute>
<xsl:attribute name="Валюта"><xsl:value-of select="@CURRENCY"/></xsl:attribute>
<xsl:if test="$EXTENDED='Y'">
<xsl:attribute name="DESCRIPTION_TYPE"><xsl:value-of select="@DESCRIPTION_TYPE"/></xsl:attribute>
<xsl:attribute name="SORT"><xsl:value-of select="@SORT"/></xsl:attribute>
<xsl:attribute name="NAME"><xsl:value-of select="@NAME"/></xsl:attribute>
<xsl:attribute name="VISIBLE"><xsl:value-of select="@VISIBLE"/></xsl:attribute>
<xsl:attribute name="OFFER_LIST_PRICE_TYPE"><xsl:value-of select="@PRICE_TYPE"/></xsl:attribute>
</xsl:if>
</xsl:if>
<xsl:variable name="OLID" select="@ID"/>
<xsl:for-each select="key('o', $OLID)">
<Предложение>
<xsl:if test="$EXTENDED='Y'">
<xsl:attribute name="ID"><xsl:value-of select="@ID"/></xsl:attribute>
</xsl:if>
<xsl:if test="not(@NEW_INFO) or @NEW_INFO='Y'">
<xsl:attribute name="ИдентификаторТовара"><xsl:value-of select="@PRODUCT_XML_ID"/></xsl:attribute>
<xsl:attribute name="Цена"><xsl:value-of select="@PRICE"/></xsl:attribute>
<xsl:attribute name="НормаУпаковки"><xsl:value-of select="@RATIO"/></xsl:attribute>
<xsl:attribute name="Количество"><xsl:value-of select="@AMOUNT"/></xsl:attribute>
<xsl:attribute name="Единица"><xsl:value-of select="@UNIT"/></xsl:attribute>
<xsl:attribute name="Валюта"><xsl:value-of select="@CURRENCY"/></xsl:attribute>
<xsl:variable name="OFID" select="@ID"/>
<xsl:for-each select="key('opv', $OFID)">
<ЗначениеСвойства>
<xsl:attribute name="ИдентификаторКаталога"><xsl:value-of select="@CATALOG_XML_ID"/></xsl:attribute>
<xsl:attribute name="ИдентификаторСвойства"><xsl:value-of select="@XML_ID"/></xsl:attribute>
<xsl:attribute name="Значение"><xsl:value-of select="@PROPERTY_VALUE"/></xsl:attribute>
</ЗначениеСвойства>
</xsl:for-each>
</xsl:if>
</Предложение>
</xsl:for-each>
<xsl:if test="not(@NEW_INFO) or @NEW_INFO='Y'">
<xsl:if test="not($EXTENDED) or $EXTENDED != 'Y'">
<ЗначениеСвойства>
<xsl:attribute name="ИдентификаторКаталога"><xsl:value-of select="@CATALOG_XML_ID"/></xsl:attribute>
<xsl:attribute name="ИдентификаторСвойства">OFFER_LIST_PRICE_TYPE</xsl:attribute>
<xsl:attribute name="Значение"><xsl:value-of select="@PRICE_TYPE"/></xsl:attribute>
</ЗначениеСвойства>
</xsl:if>
<xsl:for-each select="/Bitrix/OfferListRefPropertyValue/rs:data/z:row[@OFFER_LIST_ID=$OLID]">
<ЗначениеСвойства>
<xsl:attribute name="ИдентификаторКаталога"><xsl:value-of select="@CATALOG_XML_ID"/></xsl:attribute>
<xsl:attribute name="ИдентификаторСвойства"><xsl:value-of select="@XML_ID"/></xsl:attribute>
<xsl:attribute name="Значение"><xsl:value-of select="@PROPERTY_VALUE"/></xsl:attribute>
</ЗначениеСвойства>
</xsl:for-each>
</xsl:if>
</ПакетПредложений>
</xsl:for-each>
Гость пишет:
Повторюсь, что Все проблемы, которые Вы описываете, решатся со временем.
Да они и сейчас решаются, только за бо'льшие деньги.
Только если в таких проектах все ресурсы машины уходят на поддержку базовых возможностей, мы в нашем продукте можем себе позволить потратить ресурсы на сложную веб-аналитику или подстройку контента под интересы пользователей.
Гость пишет:
"Нет возможности использовать все возможности современных языков программирования и библиотек (графика, представление, сервисные функции и т.п.)" - так это и не нужно.
Очень нужно, поверьте. Даже в приведенном примере видно, что в этом простом шаблоне XSLT берет на себя обязанности по условному отборку и представлению данных. Чем дальше будет развиваться ваш проект, тем больше логики вы захотите в него засунуть. Вот тут и начнется основная проблема. Цена развития такого проекта начинает расти в геометрической прогрессии, а доходы при этом так же не растут, так как реальной видимой пользователю отдачи от этих технологий нет.
Все это конечно вопрос личных предпочтений, опыта и бюджетов.
Жаль только, что нам всем приходится платить за заблуждения учителей и проектировщиков, которые хотели создать идеальные системы.
Я так же уверен, что любые виды шаблонов, будь то XSLT или свои псевдо-шаблоны с "удобным" своим языком программирования будут менее производительны и более сложными в освоении и поддержании, чем традиционные языки программирования, для которых уже масса обученных специалистов, и которые работают с максимальной для них скоростью исполнения.