Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Источники значений & в интернет-магазине "

Автор diii3Раздел Шаблоны XSLT

Ответов: 2
Просмотров: 2884
Последний ответ 10 Ноября 2012, 22:04:18
от diii3
Проблема с модулем "Обратная связь-->Шабло&

Автор don_basilioРаздел Настройка системы и модулей

Ответов: 2
Просмотров: 3036
Последний ответ 14 Ноября 2011, 20:13:47
от don_basilio
Продление демо версии или перенос на новый демо хостинг

Автор rob1nРаздел Установка UMI.CMS

Ответов: 7
Просмотров: 3660
Последний ответ 01 Марта 2016, 11:00:30
от Rodogor
Новый формат расширения функционала для макросов административного интерфейса

Автор andreyРаздел Custom макросы

Ответов: 2
Просмотров: 2206
Последний ответ 31 Января 2014, 19:42:26
от admin
Новый формат расширения функционала (класcы в templates)

Автор atachРаздел Custom макросы

Ответов: 2
Просмотров: 1968
Последний ответ 26 Августа 2013, 12:45:55
от atach

0 Пользователей и 1 Гость просматривают эту тему.

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Здравствуйте!
Интересует способ отображения иконки для нового товара и новости на срок не более недели. То есть новый залитый объект каталога или новость в превьюшке и полной карточке товара отображался с пометкой "Новинка" (иконка рядом с заголовков например будет).
Понятно что показ иконки символизирующую новизну объекта надо привязать к дате публикации... но вот как это с объектом каталога сделать, да ещё с фиксированным периодом времени...

*

ilyar

У объекта каталога, как у любой странице есть /result/page/@update-time, делаем примерно так:

Код: "xsl" [Выделить]

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version = "1.0" xmlns = "http://www.w3.org/1999/xhtml" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:date = "http://exslt.org/dates-and-times" extension-element-prefixes = "date">
  <xsl:template match="/result[@module = 'catalog' and @method = 'object']">
    <xsl:variable name="isNew">
      <xsl:choose>
        <xsl:when test="page/@update-time &lt;= date:date-time() - 60 * 60 * 24 * 7">
          <xsl:text> new</xsl:text>
        </xsl:when>
        <xsl:otherwise/>
      </xsl:choose>
    </xsl:variable>
    <div class="item{$isNew}">
      ...
    </div>
  </xsl:template>
</xsl:stylesheet>

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Update-time - дата последнего изменения объекта.

Я бы добавил поле publish_time в тип данных "Объект каталога", и дальше работал бы с ним.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

ilyar

Update-time - дата последнего изменения объекта.

Я бы добавил поле publish_time в тип данных "Объект каталога", и дальше работал бы с ним.

Согласен, можно добавить publish_time, но в этом случае надо будет и добавить механизм его заполнения в момент добавления нового товара. Если приатачить к типу данных уже существующее поле  publish_time (оно используется в новостях) то при ручном добавлении нового товара оно будет заполнено, в противном случае будет пустым. Использовать Update-time это путь наименьшего сопротивления.

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Update-time - дата последнего изменения объекта.

Я бы добавил поле publish_time в тип данных "Объект каталога", и дальше работал бы с ним.

Согласен, можно добавить publish_time, но в этом случае надо будет и добавить механизм его заполнения в момент добавления нового товара. Если приатачить к типу данных уже существующее поле  publish_time (оно используется в новостях) то при ручном добавлении нового товара оно будет заполнено, в противном случае будет пустым. Использовать Update-time это путь наименьшего сопротивления.

Не знаю, как в старых версиях, но в новых publish_time автоматически заполняется датой создания элемента.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

ilyar

Не знаю, как в старых версиях, но в новых publish_time автоматически заполняется датой создания элемента.

Да заполняется при ручном добавлении, например при создании новости, при загрузке через модуль Обмена данными или импорт это тоже происходит?

*

e.ioffe

  • ****
  • 369
  • +81/-2
  • Профессиональная разработка на UMI.CMS.
    • Просмотр профиля
    • Fullspace - Лучший хостинг для UMI.CMS
Не знаю, как в старых версиях, но в новых publish_time автоматически заполняется датой создания элемента.

Да заполняется при ручном добавлении, например при создании новости, при загрузке через модуль Обмена данными или импорт это тоже происходит?

С ходу не могу сказать, надо смотреть.
Ускорение сайта на UMI.CMS - http://speed.umispec.ru/

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
У объекта каталога, как у любой странице есть /result/page/@update-time, делаем примерно так:

Код: "xsl" [Выделить]

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version = "1.0" xmlns = "http://www.w3.org/1999/xhtml" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:date = "http://exslt.org/dates-and-times" extension-element-prefixes = "date">
  <xsl:template match="/result[@module = 'catalog' and @method = 'object']">
    <xsl:variable name="isNew">
      <xsl:choose>
        <xsl:when test="page/@update-time &lt;= date:date-time() - 60 * 60 * 24 * 7">
          <xsl:text> new</xsl:text>
        </xsl:when>
        <xsl:otherwise/>
      </xsl:choose>
    </xsl:variable>
    <div class="item{$isNew}">
      ...
    </div>
  </xsl:template>
</xsl:stylesheet>

Вот и "update-time" пригодилось, спасибо! :)
Однако не побоюсь уточнить эти значение     "60 * 60 * 24 * 7"
- это временной период так обозначается ? Нельзя ли поточнее об этом ?

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Попробовал этот код применить к новости и вот что получилось (то есть ни чего не получилось):

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: xmlXPathCompOpEval: function date-time bound to undefined prefix date in /home/a/axiomateru/public_html/classes/system/subsystems/umiTemplaters/types/umiTemplaterXSLT.php on line 2

Warning: XSLTProcessor::transformToXml() [xsltprocessor.transformtoxml]: xmlXPathCompiledEval: 1 objects left on the stack. in /home/a/axiomateru/public_html/classes/system/subsystems/umiTemplaters/types/umiTemplaterXSLT.php on line 2

*

NOIRMAN

  • *****
  • 101
  • +16/-1
    • Просмотр профиля
А покажите, пожалуйста, объявление <xsl:stylesheet> полностью в начале файлика ...
Есть ли внутри него такие вот упоминания про date ?
xmlns:date="http://exslt.org/dates-and-times"
exclude-result-prefixes="xsl php udt date">

Был невнимателен ... В примере они присутствуют, но надо бы убедиться, что и в основном коде не потерялись.
« Последнее редактирование: 08 Марта 2014, 12:45:25 от NOIRMAN »

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
А покажите, пожалуйста, объявление <xsl:stylesheet> полностью в начале файлика ...
Есть ли внутри него такие вот упоминания про date ?
xmlns:date="http://exslt.org/dates-and-times"
exclude-result-prefixes="xsl php udt date">

Вставил вот такой вариант:
<xsl:stylesheet   version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:date="http://exslt.org/dates-and-times"
                xmlns:udt="http://umi-cms.ru/2007/UData/templates"
                xmlns:umi="http://www.umi-cms.ru/TR/umi"
                exclude-result-prefixes="xsl date udt umi">
ошибка ушла, но и пометка "новое" не вывелась в заголовке сегодняшней новости (точнее говоря в её анонсе)...

Вот код у меня такой:
                
<xsl:variable name="isNew">
                    <xsl:choose>
                        <xsl:when test="page/@update-time &lt;= date:date-time() - 60 * 60 * 24 * 7">
                            <xsl:text> новое</xsl:text>
                        </xsl:when>
                        <xsl:otherwise/>
                    </xsl:choose>
                </xsl:variable>
                <div class="item{$isNew}">
                    <a href="{@link}" class="title" title="{document(concat('upage://', @id, '.title'))//value}">
                        <h3 class="media-heading">
                            <xsl:value-of select="node()" />
                        </h3>
                    </a>    
                </div>
 видно, что-то с параметрами надо сделать <xsl:when test="page/@update-time &lt;= date:date-time() - 60 * 60 * 24 * 7">
« Последнее редактирование: 08 Марта 2014, 21:02:00 от Axiomateria »

*

NOIRMAN

  • *****
  • 101
  • +16/-1
    • Просмотр профиля
Похоже дело в разности форматов значений. Опытным экспериментальным путем нашел функцию date:seconds() ( http://exslt.org/date/functions/seconds/index.html ). С ней получаются более менее похожие результаты.
Во всяком случае у меня получилось следующее -
xsl:value-of select="page/@update-time" />
<br />
<xsl:value-of select="date:seconds()" />
<br />
<xsl:value-of select="(60 * 60 * 24 * 7)" />
С результатами -
1394105788
1394308688
604800
date:date-time() дает же следующий результат - 2014-03-08T23:03:20+03:00
« Последнее редактирование: 09 Марта 2014, 00:04:02 от NOIRMAN »

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Похоже дело в разности форматов значений. Опытным экспериментальным путем нашел функцию date:seconds() ( http://exslt.org/date/functions/seconds/index.html ). С ней получаются более менее похожие результаты.
Во всяком случае у меня получилось следующее -
xsl:value-of select="page/@update-time" />
<br />
<xsl:value-of select="date:seconds()" />
<br />
<xsl:value-of select="(60 * 60 * 24 * 7)" />
С результатами -
1394105788
1394308688
604800
date:date-time() дает же следующий результат - 2014-03-08T23:03:20+03:00
У меня результаты первого значения из <xsl:value-of select="page/@update-time" /> не выводится почему-то...
а с остальными двумя нормально всё:
1394361375
604800

*

NOIRMAN

  • *****
  • 101
  • +16/-1
    • Просмотр профиля
select="/result/page/@update-time" или как вариант "./page/@update-time" - так же не даст результата?
Тогда хотелось бы глянуть на xml страницы к которой идет обращение ...

Кстати, обратил внимание на описание шаблона
<xsl:template match="/result[@module = 'catalog' and @method = 'object']">
Вопрос больше для себя уточняющий ...
Слеш "/" перед result обязателен ли? Я в своих шаблонах его не использую. Чем мои действия могут в дальнейшем навредить мне?

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
select="/result/page/@update-time" или как вариант "./page/@update-time" - так же не даст результата?
Тогда хотелось бы глянуть на xml страницы к которой идет обращение ...
вот код ленты новостей для которой и надо применить (к ссылке на последнюю новость) пометку "новое":
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file">

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:date="http://exslt.org/dates-and-times"
                xmlns:udt="http://umi-cms.ru/2007/UData/templates"
                xmlns:umi="http://www.umi-cms.ru/TR/umi"
                exclude-result-prefixes="xsl date udt umi">
  
    <!-- ЛЕНТА СПРАВА НА ГЛАВНОЙ СТРАНИЦЕ БЛОГА -->
    <xsl:template match="/result[@module = 'news' and @method = 'rubric']">
        <xsl:apply-templates select="document('udata://news/lastlist/?extProps=publish_time,anons,anons_pic')" mode="news-list-right" />
    </xsl:template>  

    <xsl:template match="udata[@method = 'lastlist']" mode="news-list-right">
        <xsl:apply-templates select="items/item" mode="news-list-right" />
        <xsl:apply-templates select="total" />
    </xsl:template>

    <xsl:template match="page|item" mode="news-list-right">  
        <div class="media">
            <div class="img-lenta">  
                <xsl:if test=".//property[@name = 'anons_pic']/value">                    
                    <a href="{@link}" title="{document(concat('upage://', @id, '.h1'))//value}" class="pull-left">
                        <xsl:call-template name="catalog-thumbnail">
                            <xsl:with-param name="element-id" select="@id" />
                            <xsl:with-param name="field-name">anons_pic</xsl:with-param>
                            <xsl:with-param name="width">120</xsl:with-param>
                            <xsl:with-param name="height">120</xsl:with-param>
                        </xsl:call-template>
                    </a>            
                </xsl:if>
                <p class="article-date">
                    <span class="label label-default">
                        <xsl:apply-templates select=".//property[@name = 'publish_time']" />
                    </span>
                </p>  
            </div>
            <div class="media-body">      
                <xsl:variable name="isNew">
                    <xsl:choose>
                        <xsl:when test="page/@update-time &lt;= date:seconds() - 60 * 60 * 24 * 7">
                            <xsl:text> новое</xsl:text>
                        </xsl:when>
                        <xsl:otherwise/>
                    </xsl:choose>
                </xsl:variable>
                <div class="item{$isNew}">
                    <a href="{@link}" class="title" title="{document(concat('upage://', @id, '.title'))//value}">
                        <h3 class="media-heading">
                            <xsl:value-of select="node()" />
                        </h3>
                    </a>    
                </div>                        
                <xsl:apply-templates select="document(concat('upage://', @id, '.included_storyline'))" mode="storylines-simlink-right" />              
                <div class="article-description">
                    <xsl:value-of select=".//property[@name = 'anons']/value" disable-output-escaping="yes" />
                </div>                  
            </div>
            <hr/>
        </div>
    </xsl:template>
</xsl:stylesheet>
« Последнее редактирование: 31 Марта 2014, 15:07:30 от Axiomateria »