Доброго времени суток.
Создала страницу новостей
Вывела новости, рубрики в которых они находятся, их alt-name, т.к. он нужен для фильтра, вроде все хорошо.
Но вот в каждой новости должно быть название категории к которой он относится и так же нужен alt-name для блока в котором новость...
- Новости и события (основная лента)
-- Общие вопросы(лента)
---Новость 1
-- Конференции и семинары(лента)
-- Тренинг-центр(лента)
Но тем же методом, который я использовала для lastlents, у меня внутри новости не получается вывести название ленты, в которой она находится, а получилось вывести название и alt-name, корневой ленты новостей...
<xsl:template match="result[@module = 'news'][@method = 'rubric']">
<xsl:apply-templates select="document('udata://news/lastlents/(alls-news)/notemplate/10/0')"/>
<!--Кстати, а можно избежать указания id номеров, если я прописываю @id, то новости не отображаются -->
<xsl:apply-templates select="document(concat('udata://news/lastlist/', '(1090)(1091)(1092)(1093)(1094)(1095)(1096)', '//10/0/?extProps=publish_time,h1,content,news_image,anons'))/udata" />
</xsl:template>
<xsl:template match="udata[@method = 'lastlents']">
<div class="rubrics">
<h4>Рубрики</h4>
<ul id="rubric-nav" umi:element-id="{$document-page-id}" umi:region="list" umi:module="news" umi:method="lastlist" umi:sortable="sortable">
<li class="alls-news">
<a rel="alls-news" class="">
<xsl:if test="position() = 1">
<xsl:attribute name="class">current</xsl:attribute>
</xsl:if>
Все
</a>
</li>
<xsl:apply-templates select="items/item" mode="news-rubrics" />
</ul>
</div>
</xsl:template>
<xsl:template match="item" mode="news-rubrics">
<li class="{document(concat('upage://',@id))/udata/page/@alt-name}" umi:element-id="{@id}" umi:region="row">
<a rel="{document(concat('upage://',@id))/udata/page/@alt-name}">
<xsl:value-of select="node()" />
</a>
</li>
</xsl:template>
<xsl:template match="udata[@method = 'lastlist']">
<div class="tabs">
<div class="numpages">
<xsl:apply-templates select="total" />
</div>
<ul class="tabs__caption">
<li class="active">Грядущие события</li>
<li>прошедшие мероприятия</li>
</ul>
<!-- rubric tab now -->
<div class="tabs__content active">
<!-- rubric now -->
<div id="all-rubric" umi:button-position="top right" umi:element-id="{$document-page-id}" umi:region="list" umi:module="news" umi:method="lastlist" umi:sortable="sortable">
<xsl:apply-templates select="items/item" mode="news-list" />
</div>
<!-- /rubric now -->
</div>
<!-- /rubric tab now -->
<!-- rubric tab past -->
<div class="tabs__content">
<!-- rubric past -->
<div id="all-rubric">
1 <!-- сюда должны идти новости и события, которые прошли/закончились -->
</div>
<!-- /rubric past -->
</div>
<!-- rubric tab past -->
</div>
<!-- /tabs -->
</xsl:template>
<xsl:template match="item" mode="news-list">
<xsl:variable name="date" select="document(concat('udata://system/convertDate/', @publish_time, '/(Y-m-d%20(H:i))'))/udata" />
<!-- проверяла какой alt-name вывожу -->
<xsl:value-of select="document(concat('upage://',$document-page-id))/udata/page/@alt-name" />
<div class="rubric alls-news " umi:element-id="{@id}" umi:region="row">
<a href="{@link}" umi:field-name="name" umi:delete="delete" umi:empty="&empty-page-name;" class="rubric_link">
<span class="arrow"></span>
<div class="rubric_info">
<span class="date" umi:element-id="{@id}" umi:field-name="publish_time" umi:format="Y-m-d (H:i)">
<xsl:value-of select="$date" />
</span>
<span class="rubric_topic" umi:element-id="{$document-page-id}" umi:field-name="h1" umi:region="row">
<xsl:value-of select="document(concat('upage://', $document-page-id, '.h1'))/udata/property/value" disable-output-escaping="yes" />
</span>
</div>
<div class="rubric_text" umi:field-name="anons" umi:empty="&empty-page-anons;">
<h4><xsl:value-of select="node()" /></h4>
<p umi:field-name="anons" umi:empty="&empty-page-anons;">
<xsl:value-of select=".//property[@name = 'anons']/value" disable-output-escaping="yes" />
</p>
</div>
</a>
</div>
</xsl:template>
По второму вопросу:
Как проверить, что новость/событие прошли и чтобы она выводилась в другом месте?
Спасибо.
Но тем же методом, который я использовала для lastlents, у меня внутри новости не получается вывести название ленты, в которой она находится, а получилось вывести название и alt-name, корневой ленты новостей...
Так как в шаблоне, который выводит новость, вы получаете alt-name запросом
<!-- проверяла какой alt-name вывожу -->
<xsl:value-of select="document(concat('upage://',$document-page-id))/udata/page/@alt-name" />
вы всегда получаете alt-name текущей страницы, так как в переменной $document-page-id содержится id текущей страницы
Вам подойдет такой вызов
<!-- проверяла какой alt-name вывожу -->
<xsl:value-of select="document(concat('upage://',@lent_id))/udata/page/@alt-name" />
А вообще, не понятно, почему для фильтрации через js вы выбрали именно alt-name атрибут и для него запускаете так много upage запросов. Можно ли использовать для этих целей id ленты новостей?
То есть, и в списке рубрик и в новостях выводить id ленты новостей
Например, в самой новости вместо alt-name делать такой запрос
<!-- проверяла какой alt-name вывожу -->
<xsl:value-of select="@lent_id" />
По поводу второго вопроса:
Есть несколько способов.
1. Если в выборке новостей (результат макроса /news/lastlist/) у вас есть все новости, проверяйте, что у них в атрибуте @publish_time и если это значение больше текущего времени в UNIX_TIMESTAMP формате то читаем их будущими новостями и наоборот.
Для этого вам потребуется текущее время в формате UNIX_TIMESTAMP . Его можно получить так:
<xsl:variable name="curr_date" select="document('udata://system/convertDate/now/U'))/udata" />
2. Делаем запрос в списку новостей, указывая временной промежуток используя 5-ый параметр в макросе /news/lastlist/ (http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/novosti/news_lastlist/#content&sel=19:1,24:92) . Например, так вызываем только будущие новости
udata://news/lastlist/(new)/notemplate/10/0/(+ +1m)
3. Или пишем кастом)
Ууу... сейчас буду пробовать этот способ.
Только вопрос, можно вместо даты публикации ориентироваться на дату завершения скидки?
А то например, не все новости должны попадать в прошедшие события...
вы можете сравнивать с любым полем типа дата, тут основной момент был в том, что идет сравнения текущей даты и даты из какого-то поля (просто дату из поля вытягивайте через extProps при вызове макроса со списком новостей)
Так... я наконец добралась снова до новостей сайта..
Я сделала вот такие запросы... Но что-то не так, только вот что?
Т.к. в обоих вкладках выводится одни и те же новости...
Хотя есть новости и этого числа и прошлогодние..
<xsl:template match="result[@module = 'news'][@method = 'rubric']">
<xsl:apply-templates select="document('udata://news/lastlents/(alls-news)/notemplate/10/1/')"/>
<div class="tabs">
<xsl:apply-templates select="total" />
<ul class="tabs__caption">
<li class="active">Грядущие события</li>
<li>прошедшие мероприятия</li>
</ul>
<div class="tabs__content active">
<xsl:apply-templates select="total" />
<xsl:apply-templates select="document(concat('udata://news/lastlist/', '(1090)(1091)(1092)(1093)(1094)(1095)(1096)', '//5/(+10d-5d)/?extProps=publish_time,h1,content,news_image,anons'))/udata"
mode="upcoming" />
</div>
<div class="tabs__content">
<xsl:apply-templates select="total" />
<xsl:apply-templates select="document(concat('udata://news/lastlist/', '(1090)(1091)(1092)(1093)(1094)(1095)(1096)', '//5/(-m)/?extProps=publish_time,h1,content,news_image,anons'))/udata"
mode="pastevents" />
</div>
</div>
</xsl:template>
И пагинация не включается...
Доброго времени суток.
Как правильно написать условие для сравнения двух дат?
В частности текущую и которая стоит в поле....
<xsl:variable name="time" select=".//property[@name='publish_time']/value/@unix-timestamp" />
<xsl:variable name="date_item" select="document(concat('udata://system/convertDate/', $time, '/(d.m.Y%20(H:i))'))/udata" />
<xsl:variable name="curr_date" select="document('udata://system/convertDate/now/U/(d.m.Y%20(H:i))')/udata" />
<xsl:variable name="date_now" select="document(concat('udata://system/convertDate/',$curr_date, '/(d.m.Y%20(H:i))'))/udata" />
<xsl:if test="$date & gt;= $date_now">
<xsl:value-of select="$date_now" />
</xsl:if>