Календарь
h4mpy
10 октября 2008 г.
Есть ли какое-то типовое решение для создания архива (новостей, статей) в виде календаря?
например trud.ru/read/archiv.php , mk.ru/blogs/archive/MK/
если новость есть на дату ставится ссылка
и вывода на главную например последнего месяца (текущий месяц с подсветкой текущей даты)
например trud.ru/read/archiv.php , mk.ru/blogs/archive/MK/
если новость есть на дату ставится ссылка
и вывода на главную например последнего месяца (текущий месяц с подсветкой текущей даты)
Rovshan
3 ноября 2008 г.
Присоединяюсь к вопросу
Rovshan
3 ноября 2008 г.
h4mpy
7 ноября 2008 г.
хотелось бы на xsl, тут первая задача сделать автоматическое формирование архива
допустим по умолчанию выводятся только новости текущего месяца, остальные уходят в архив по месяцам и годам, сетку то в принципе не проблема сделать
и путь бы формировался /news/2008/10/08/ например
вот неплохо сделано..www.eabr.org/rus/media/press/
последний месяц, его сетка и фильтр по месяцам-годам
в общем хотелось бы что-то для новостных сайтов, самостоятельно ничего хорошего не получается/
+интересно как сделано на vsesmi.ru/today_news/ ? там есть деление год-месяц-день, как это формируется?
допустим по умолчанию выводятся только новости текущего месяца, остальные уходят в архив по месяцам и годам, сетку то в принципе не проблема сделать
и путь бы формировался /news/2008/10/08/ например
вот неплохо сделано..www.eabr.org/rus/media/press/
последний месяц, его сетка и фильтр по месяцам-годам
в общем хотелось бы что-то для новостных сайтов, самостоятельно ничего хорошего не получается/
+интересно как сделано на vsesmi.ru/today_news/ ? там есть деление год-месяц-день, как это формируется?
Ivanov
Модератор
13 ноября 2008 г.
Для реализации данного архива Вам необходимо сделать следующее:
1. Создать XSL-шаблон 'АрхивНовостей' со следующим кодом
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/">
<xsl:apply-templates select="/document"/>
</xsl:template>
<xsl:template match="/document">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>
<!-- Если в находимся корне - выводим название информационной системы -->
<xsl:if test="blocks/parent_group_id = 0">
<h1>
<xsl:value-of disable-output-escaping="yes" select="blocks/name"/>
</h1>
<!-- Описание выводится при отсутствии фильтрации по тэгам -->
<xsl:if test="count(blocks/tags/tag) = 0">
<xsl:value-of disable-output-escaping="yes" select="blocks/description"/>
</xsl:if>
</xsl:if>
<!-- Если в находимся в группе - выводим название группы -->
<xsl:if test="blocks/parent_group_id != 0">
<h1>
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/>
</h1>
<!-- Описание выводим только на первой странице -->
<xsl:if test="blocks/items/current_page = 0">
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/description"/>
</xsl:if>
<!-- Путь к группе -->
<p>
<xsl:apply-templates select=".//group[@id=$parent_group_id]" mode="goup_path"/>
</p>
</xsl:if>
<!-- Список годов -->
<div class="archive_calendar">
<ul>
<xsl:call-template name="for_years">
<xsl:with-param name="current_year" select="/document/Год"/>
<xsl:with-param name="count_years" select="/document/ТекущийГод - 2000"/>
</xsl:call-template>
</ul>
<table>
<tbody>
<tr>
<xsl:choose>
<xsl:when test="/document/Месяц = 01">
<td class="act">
<span>январь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 01 > /document/ТекущийМесяц">январь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/01/">январь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 02">
<td class="act">
<span>февраль</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 02 > /document/ТекущийМесяц">февраль</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/02/">февраль</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 03">
<td class="act">
<span>март</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/Год and 03 > /document/ТекущийМесяц">март</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/03/">март</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 04">
<td class="act">
<span>апрель</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 04 > /document/ТекущийМесяц">апрель</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/04/">апрель</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 05">
<td class="act">
<span>май</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 05 > /document/ТекущийМесяц">май</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/05/">май</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 06">
<td class="act">
<span>июнь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 06 > /document/ТекущийМесяц ">июнь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/06/">июнь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
</tr>
<tr>
<xsl:choose>
<xsl:when test="/document/Месяц = 07">
<td class="act">
<span>июль</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 07 > /document/ТекущийМесяц">июль</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/07/">июль</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 08">
<td class="act">
<span>август</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 08 > /document/ТекущийМесяц">август</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/08/">август</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 09">
<td class="act">
<span>сентябрь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 09 > /document/ТекущийМесяц">сентябрь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/09/">сентябрь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 10">
<td class="act">
<span>октябрь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 10 > /document/ТекущийМесяц">октябрь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/10/">октябрь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 11">
<td class="act">
<span>ноябрь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 11 > /document/ТекущийМесяц">ноябрь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/11/">ноябрь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 12">
<td class="act">
<span>декабрь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 12 > /document/ТекущийМесяц">декабрь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/12/">декабрь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
</tr>
</tbody>
</table>
</div>
<div class="item_list">
<!-- Отображение записи информационной системы -->
<xsl:apply-templates select="blocks/items/item[item_status=1]"/>
</div>
<xsl:if test="blocks/items/count_items > blocks/items/items_on_page">
<!-- Ссылка, для которой дописываются суффиксы page-XX/ -->
<xsl:variable name="link">
<xsl:value-of select="/document/blocks/url"/>
<xsl:if test="$parent_group_id != 0">
<xsl:value-of select="/document/blocks//group[@id = $parent_group_id]/fullpath"/>
</xsl:if>
<xsl:value-of select="Год"/>/<xsl:value-of select="Месяц"/>/</xsl:variable>
<div class="pager">
<h3>
<strong>Страницы</strong>
</h3>
<p>
<xsl:call-template name="for">
<xsl:with-param name="link" select="$link"/>
<xsl:with-param name="items_on_page" select="blocks/items/items_on_page"/>
<xsl:with-param name="current_page" select="blocks/items/current_page"/>
<xsl:with-param name="count_items" select="blocks/items/count_items"/>
<xsl:with-param name="visible_pages">5</xsl:with-param>
</xsl:call-template>
</p>
</div>
</xsl:if>
</xsl:template>
<!-- Данные о статьях -->
<xsl:template match="blocks/items/item">
<div class="article_one">
<br/>
<b>
<xsl:value-of disable-output-escaping="yes" select="substring(item_datetime,1,10)"/> |<xsl:value-of disable-output-escaping="yes" select="substring(item_datetime,11,6)"/></b>
<h2>
<a href="{item_path}">
<xsl:value-of disable-output-escaping="yes" select="item_name"/>
</a>
</h2>
<!-- Изображение для информационного элемента (если есть) -->
<xsl:if test="item_small_image!=''">
<img src="{item_small_image}" alt="{item_name}" align="left"/>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="item_description"/>
</div>
</xsl:template>
<!-- /// Метки для информационного элемента /// -->
<xsl:template match="tags/tag">
<a href="{/document/blocks/url}tag/{tag_path_name}/" class="tag">
<xsl:value-of select="tag_name"/>
</a>
<xsl:if test="position() != last()">,</xsl:if> </xsl:template>
<!-- Цикл для вывода строк ссылок -->
<xsl:template name="for">
<xsl:param name="i" select="0"/>
<xsl:param name="prefix">page</xsl:param>
<xsl:param name="link"/>
<xsl:param name="items_on_page"/>
<xsl:param name="current_page"/>
<xsl:param name="count_items"/>
<xsl:param name="visible_pages"/>
<xsl:variable name="n" select="$count_items div $items_on_page"/>
<!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
<xsl:variable name="parent_group_id" select="/document/blocks/parent_group_id"/>
<!-- Считаем количество выводимых ссылок перед текущим элементом -->
<xsl:variable name="pre_count_page">
<xsl:choose>
<xsl:when test="$current_page > ($n - (round($visible_pages div 2) - 1))">
<xsl:value-of select="$visible_pages - ($n - $current_page)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="round($visible_pages div 2) - 1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Считаем количество выводимых ссылок после текущего элемента -->
<xsl:variable name="post_count_page">
<xsl:choose>
<xsl:when test="0 > $current_page - (round($visible_pages div 2) - 1)">
<xsl:value-of select="$visible_pages - $current_page - 1"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="round($visible_pages div 2) = ($visible_pages div 2)">
<xsl:value-of select="$visible_pages div 2"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="round($visible_pages div 2) - 1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!--
<xsl:if test="$i = 0 and $current_page != 0">
<xsl:choose>
<xsl:when test="$current_page != 1">
<a href="{$link}page-{$current_page}/" style="color: #333;">← предыдущая</a>   </xsl:when>
<xsl:otherwise>
<a href="{$link}" style="color: #333;">← предыдущая</a>   </xsl:otherwise>
</xsl:choose>
</xsl:if>
-->
<!--
<xsl:if test="$i = 0 and $current_page != 0">
<span class="ctrl">←
Ctrl</span>
</xsl:if>
-->
<!--
<xsl:if test="$i >= $n and ($n - 1) > $current_page">
<span class="ctrl">Ctrl →</span>
</xsl:if>
-->
<!--
<xsl:if test="$i >= $n and ($n - 1) > $current_page">
<xsl:variable name="redo_link" select="$current_page + 2"/>
<a href="{$link}page-{$redo_link}/" style="color: #333;">следующая→</a>
</xsl:if>
-->
<xsl:if test="$count_items > $items_on_page and $n > $i">
<!-- Определяем адрес тэга -->
<xsl:variable name="tag_link">
<xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="count(/document/blocks/selected_tags/tag) != 0">tag/<xsl:value-of select="/document/blocks/selected_tags/tag/tag_path_name"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Определяем адрес ссылки -->
<xsl:variable name="number_link">
<xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="$i != 0">
<xsl:value-of select="$prefix"/>-<xsl:value-of select="$i + 1"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Ставим ссылку на страницу-->
<xsl:if test="$i != $current_page">
<!-- Выводим ссылку на первую страницу -->
<xsl:if test="$current_page - $pre_count_page > 0 and $i = 0">
<a href="{$link}" class="page_link" style="text-decoration: none;">первая</a> 
</xsl:if>
<xsl:choose>
<xsl:when test="$i >= ($current_page - $pre_count_page) and ($current_page + $post_count_page) >= $i">
<!-- Выводим ссылки на видимые страницы -->
<a href="{$link}{$tag_link}{$number_link}" class="page_link">
<xsl:value-of select="$i + 1"/>
</a> 
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
<!-- Выводим ссылку на последнюю страницу -->
<xsl:if test="$i+1 >= $n and $n > ($current_page + 1 + $post_count_page)">
<xsl:choose>
<xsl:when test="$n > round($n)">
<!-- Выводим ссылку на последнюю страницу -->
<a href="{$link}{$prefix}-{round($n+1)}/" class="page_link" style="text-decoration: none;">последняя</a>
</xsl:when>
<xsl:otherwise>
<a href="{$link}{$prefix}-{round($n)}/" class="page_link" style="text-decoration: none;">последняя</a>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:if>
<!-- Ссылка на предыдущую страницу для Ctrl + влево -->
<xsl:if test="$current_page != 0 and $i = $current_page">
<xsl:variable name="prev_number_link">
<xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="($current_page - 1) != 0">page-<xsl:value-of select="$i"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<a href="{$link}{$tag_link}{$prev_number_link}" id="id_prev"></a>
</xsl:if>
<!-- Ссылка на следующую страницу для Ctrl + вправо -->
<xsl:if test="($n - 1) > $current_page and $i = $current_page">
<a href="{$link}{$tag_link}page-{$current_page+2}/" id="id_next"></a>
</xsl:if>
<!-- Не ставим ссылку на страницу-->
<xsl:if test="$i = $current_page">
<span class="current">
<xsl:value-of select="$i+1"/> 
</span>
</xsl:if>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="prefix" select="$prefix"/>
<xsl:with-param name="link" select="$link"/>
<xsl:with-param name="items_on_page" select="$items_on_page"/>
<xsl:with-param name="current_page" select="$current_page"/>
<xsl:with-param name="count_items" select="$count_items"/>
<xsl:with-param name="visible_pages" select="$visible_pages"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="for_years">
<xsl:param name="i" select="0"/>
<xsl:param name="current_year"/>
<xsl:param name="count_years"/>
<xsl:variable name="year" select="2000 + $count_years - $i"/>
<xsl:if test="$count_years>=$i ">
<li>
<xsl:choose>
<xsl:when test="/document/Год != $year">
<a href="{/document/blocks/url}{$year}/01/">
<xsl:value-of disable-output-escaping="yes" select="$year"/>
</a>
</xsl:when>
<xsl:otherwise>
<strong>
<xsl:value-of disable-output-escaping="yes" select="2000 + $count_years - $i"/>
</strong>
</xsl:otherwise>
</xsl:choose> </li>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for_years">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="current_year" select="$current_year"/>
<xsl:with-param name="count_years" select="$count_years"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="for_monts">
<xsl:param name="i" select="1"/>
<xsl:param name="current_mont"/>
<xsl:if test="12>=$i">
<xsl:variable name="td_class">
<xsl:choose>
<xsl:when test="/document/Месяц != $current_mont">class="act"</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for_years">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="current_mont" select="$current_mont"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
2. Создать XSL-шаблон 'ПоказНовости' с кодом
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/">
<xsl:apply-templates select="/document/item"/>
</xsl:template>
<xsl:template match="/document/item">
<div class="article_one">
<h2>
<xsl:value-of disable-output-escaping="yes" select="item_name"/>
</h2>
<!-- Проверяем задан ли путь к файлу большого изображения -->
<xsl:if test="item_image !='' ">
<xsl:variable name="srcpath" select="item_image"/>
<a href="{item_image}"><img align="left" src="{item_small_image}"/>
</a>
</xsl:if>
<!-- Текст информационного элемента -->
<xsl:value-of disable-output-escaping="yes" select="item_text"/>
</div>
</xsl:template>
</xsl:stylesheet>
3. Создать новую типовую динамическую страницу.
4. В исходный код данной страницы вставить следующий код
<?php
$InformationSystem_id = to_int($GLOBALS['LA']['InformationSystemID']);
// Получаем информацию о текущем пользователе
if (class_exists('SiteUsers'))
{
$SiteUsers = & singleton('SiteUsers');
$site_user_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
$site_user_id = 0;
}
/* Массив внешних параметров, передаваемых в XML */
$external_propertys = array();
/* XSL шаблон для отображения списка элементов информационной системы */
$xsl_list = to_str($GLOBALS['LA']['xsl_information_system_list']);
/* XSL шаблон для отображения элемента информационной системы */
$xsl_item = to_str($GLOBALS['LA']['xsl_information_item']);
$InformationResult = $GLOBALS['InformationResult'];
/* Массив дополнительных параметров */
$property = array();
/* Число элементов на страницу */
if (isset($InformationResult['items_on_page']))
{
if ($InformationResult['items_on_page'] !== true)
{
$InformationResult['items_on_page'] = to_int($InformationResult['items_on_page']);
}
}
else
{
$InformationResult['items_on_page'] = 10;
}
/* Номер, с которого начинается показ */
if (isset($InformationResult['items_begin']))
{
$InformationResult['items_begin'] = to_int($InformationResult['items_begin']);
}
else
{
$InformationResult['items_begin'] = 0;
}
// Метод определения идентификатора информационной группы и идентификатора
// информационного элемента по значению URI
$result = $GLOBALS['LA_InformationSystem']->GetInformationFromPath($InformationSystem_id);
if ($result != false)
{
/* Вывод списка */
if ($result['item'] == false)
{
$external_propertys = array();
$external_propertys['ТекущийГод'] = date('Y');
$external_propertys['Год'] = $GLOBALS['year'];//date('Y');
$external_propertys['ТекущийМесяц'] = date('m');
$external_propertys['Месяц'] = $GLOBALS['mont'];//;
// Отображаем рейтинг новостей
$property = array();
$element['type'] = 0;
$element['prefix'] = ' and ';
$element['name'] = 'information_items_table.information_items_status';
$element['if'] = '=';
$element['value'] = '1';
$element['sufix'] = '';
$property['select'][] = $element;
$element['type'] = 0;
$element['prefix'] = ' and ';
$element['name'] = 'information_items_table.information_items_date';
$element['if'] = '>=';
$element['value'] = $GLOBALS['year'] . '-' . $GLOBALS['mont'] . '-01 00:00:00' ;
$element['sufix'] = '';
$property['select'][] = $element;
$element['type'] = 0;
$element['prefix'] = ' and ';
$element['name'] = 'information_items_table.information_items_date';
$element['if'] = '<=';
$element['value'] = $GLOBALS['year'] . '-' . $GLOBALS['mont'] . '-31 23:59:59' ;
$element['sufix'] = '';
$property['select'][] = $element;
/* Отображаем архив статей */
$GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $result['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
}
else
{
/* Определяем идентификатор информационного элемента */
$item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($result['item'], $result['group'], $InformationSystem_id);
/* Выводим статью */
$GLOBALS['LA_InformationSystem']->ShowInformationSystemItem($item_id, $xsl_item, $external_propertys);
}
}
?>
5. На вкладке Настройки страницы вставить следующий код:
<?php
$kernel = & singleton('kernel');
/* ID Информационной системы */
$InformationSystem_id = to_int($GLOBALS['LA']['InformationSystemID']);
/* Количество записей на страницу */
$items_on_page = to_int($GLOBALS['LA']['ItemsOnPage']);
$GLOBALS['LA_InformationSystem'] = & singleton('InformationSystem');
if ($items_on_page !== true)
{
$items_on_page = to_int($items_on_page);
}
$property = to_array($property);
/* Текстовая информация для указания номера страницы, например "страница" */
if (isset($GLOBALS['LA']['page']))
{
$property['page'] = to_str($GLOBALS['LA']['page']);
}
else
{
$property['page'] = 'страница';
}
/* Разделитель в заголовке страницы */
if (isset($GLOBALS['LA']['separator']))
{
$property['separator'] = to_str($GLOBALS['LA']['separator']);
}
else
{
$property['separator'] = ' / ';
}
$GLOBALS['InformationResult'] = array();
// Если указание на страницу - не прерываем определение
if (ereg ("^part-([0-9]*)$", end($GLOBALS['URL_ARRAY']), $regs) && to_int($regs[1]) > 0)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$break_if_path_not_found = false;
$GLOBALS['part_ii'] = $regs[1];
}
else
{
$break_if_path_not_found = false;
$GLOBALS['part_ii'] = 1;
}
$count_url_array = count($GLOBALS['URL_ARRAY']);
if (!isset($GLOBALS['URL_ARRAY'][1]))
{
$GLOBALS['year'] = date('Y');
}
else
{
$GLOBALS['year'] = to_str($GLOBALS['URL_ARRAY'][1]);
}
if (!isset($GLOBALS['URL_ARRAY'][2]))
{
$GLOBALS['mont'] = date('m');
}
else
{
$GLOBALS['mont'] = to_str($GLOBALS['URL_ARRAY'][2]);
}
if ($count_url_array >= 3)
{
unset($GLOBALS['URL_ARRAY'][1]);
unset($GLOBALS['URL_ARRAY'][2]);
}
/* получаем для пути ассоциативный массив с id группы и id/url элемента для данной инфосистемы */
$GLOBALS['INFSYS_result'] = $GLOBALS['LA_InformationSystem']->GetInformationFromPath($InformationSystem_id, '', $break_if_path_not_found);
/* Если путь существует */
if ($GLOBALS['INFSYS_result'])
{
/* получаем массив с деревом от текущей группы до корня */
$GLOBALS['LA_InformationSystem']->GetInformationGroupsForXml($GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$group_path='';
$mas_information_groups_for_xml=$GLOBALS['LA_InformationSystem']->get_mas_information_groups_for_xml();
/* получаем данные о группе */
$group_result=$GLOBALS['LA_InformationSystem']->SelectInformationGroups($GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$row_group=mysql_fetch_assoc($group_result);
/* получаем данные из seo - полей для групп */
$seo_title = trim($row_group['information_groups_seo_title']);
$seo_description = trim($row_group['information_groups_seo_description']);
$seo_keywords = trim($row_group['information_groups_seo_keywords']);
/* цикл по массиву с деревом для формирования пути по группам */
for($i = count($mas_information_groups_for_xml)-1; $i >= 0; $i--)
{
/* seo_title для группы пустое, то в заголовок подставляем название */
if (trim($mas_information_groups_for_xml[$i]['information_groups_seo_title'])=='')
{
$group_path.=$property['separator'].$mas_information_groups_for_xml[$i]['information_groups_name'];
}
else
{
$group_path.=$property['separator'].$mas_information_groups_for_xml[$i]['information_groups_seo_title'];
}
}
/* определяем название информационной системы */
$row = $GLOBALS['LA_InformationSystem']->GetInformationSystem($InformationSystem_id);
/* имя информационной системы */
$InformationSystem_name = $row['information_systems_name'];
/* Если вывод информационного элемента */
if ($GLOBALS['INFSYS_result']['item'])
{
/* определяем id информационного элемента */
$item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($GLOBALS['INFSYS_result']['item'], $GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$GLOBALS['InformationResult']['item_id'] = $item_id;
/* получаем данные об элементе */
$row_item = $GLOBALS['LA_InformationSystem']->GetInformationSystemItem($item_id);
/* проверяем если seo_title непустой, то в заголовок страницы подставляем его */
if (trim($row_item['information_items_seo_title']) != '')
{
$item_name = $property['separator'].trim($row_item['information_items_seo_title']);
}
else
{
/* имя элемента */
$item_name=$property['separator'].$row_item['information_items_name'];
}
}
else
{
/* Вывод информационной группы */
/* Определяем номер страницы для показа */
$end_array_item = end($GLOBALS['URL_ARRAY']);
$page = to_str($end_array_item);
if (ereg ("^page-([0-9]*)$", $page, $regs) && to_int($regs[1]) > 0)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$items_begin = ($regs[1] - 1) * $items_on_page;
/* Если показываем группу, а не элемент, то указываем страницу (страница N), если она не первая */
$page_number = "{$property['separator']}{$property['page']} {$regs[1]}";
}
else
{
$items_begin = 0;
}
/* Массив, возвращаемый методом */
$GLOBALS['InformationResult']['items_begin'] = $items_begin;
}
if (isset($GLOBALS['INFSYS_result']['tag_name']))
{
$tag_name = "Метка: {$GLOBALS['INFSYS_result']['tag_name']} {$property['separator']}";
}
/* формируем заголовок страницы */
$new_title = 'Газета Республика Татарстан' . $property['separator'] . $InformationSystem_name . $group_path . to_str($item_name) . to_str($page_number);
}
else
{
// Элемент/группа не найдены, возвращаем 404 ошибку.
ShowHeader404();
if (to_str($_SERVER['REQUEST_URI']) != '/')
{
header('Location: /');
}
// Прекращаем выполнение
exit();
}
if (!empty($new_title))
{
/* отображаем группу, если не существует данных об элементе и родительская группа не является корнем */
if (!isset($row_item) && $GLOBALS['INFSYS_result']['group'] != 0 || isset($tag_name))
{
/* Заголовок для группы задан */
if (!empty($seo_title))
{
$kernel->set_title($seo_title);
}
else
{
$kernel->set_title($new_title);
}
/* Описание для группы задано */
if (!empty($seo_description))
{
$kernel->set_description($seo_description);
}
else
{
$kernel->set_description($new_title);
}
/* Ключевые слова для группы заданы */
if (!empty($seo_keywords))
{
$kernel->set_keywords($seo_keywords);
}
else
{
$kernel->set_keywords($new_title);
}
}
elseif (isset($row_item)) /* отображаем элемент */
{
if (!empty($row_item['information_items_seo_description']))
{
$kernel->set_title(trim($row_item['information_items_seo_title']));
}
else
{
$kernel->set_title($new_title);
}
/* Описание для элемента задано */
if (!empty($row_item['information_items_seo_description']))
{
$kernel->set_description(trim($row_item['information_items_seo_description']));
}
else
{
$kernel->set_description($new_title);
}
/* Ключевые слова для элемента заданы */
if (!empty($row_item['information_items_seo_keywords']))
{
$kernel->set_keywords(trim($row_item['information_items_seo_keywords']));
}
else
{
$kernel->set_keywords($new_title);
}
}
}
$GLOBALS['InformationResult']['items_on_page'] = $items_on_page;
?>
4. Для созданной типовой динамической страницы добавить следующие параметры:
Название параметра |Назв. переменной/Тип/Значен.|
----------------------------------------------------------
Код информационной системы | InformationSystemID/ |
| SQL-запрос/
|SELECT * FROM
|`information_systems_table`
|WHERE `site_id` = '{SITE_ID}'
|ORDER BY
|`information_systems_name`;
----------------------------------------------------------
Число выводимых элементов | ItemsOnPage/ |
на страницу | Поле ввода |
| |
----------------------------------------------------------
Разделитель в заголовке | separator/ |
страницы | Поле ввода/ |
| - |
----------------------------------------------------------
XSL шаблон для отображения |xsl_information_system_list |
списка элементов |XSl-шаблон |
информационной системы |АрхивНовостей |
----------------------------------------------------------
XSL шаблон для отображения |xsl_information_item |
элемента информационной |XSl-шаблон |
системы |ПоказНовости |
----------------------------------------------------------
6.Создать информационную систему. В приведенном примере все новости должны находиться в корне. Но это в дальнейшем можно исправить и добавить разделение по каталогам(месяцам/годам и т.д.)
7. Создать узел структуры, связать его с созданной выше информационной системой, а также сделать ее тип "Типовая динамическая страница" и связать с созданной выше типовой динамической страницой.
1. Создать XSL-шаблон 'АрхивНовостей' со следующим кодом
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/">
<xsl:apply-templates select="/document"/>
</xsl:template>
<xsl:template match="/document">
<!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
<xsl:variable name="parent_group_id" select="blocks/parent_group_id"/>
<!-- Если в находимся корне - выводим название информационной системы -->
<xsl:if test="blocks/parent_group_id = 0">
<h1>
<xsl:value-of disable-output-escaping="yes" select="blocks/name"/>
</h1>
<!-- Описание выводится при отсутствии фильтрации по тэгам -->
<xsl:if test="count(blocks/tags/tag) = 0">
<xsl:value-of disable-output-escaping="yes" select="blocks/description"/>
</xsl:if>
</xsl:if>
<!-- Если в находимся в группе - выводим название группы -->
<xsl:if test="blocks/parent_group_id != 0">
<h1>
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/>
</h1>
<!-- Описание выводим только на первой странице -->
<xsl:if test="blocks/items/current_page = 0">
<xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/description"/>
</xsl:if>
<!-- Путь к группе -->
<p>
<xsl:apply-templates select=".//group[@id=$parent_group_id]" mode="goup_path"/>
</p>
</xsl:if>
<!-- Список годов -->
<div class="archive_calendar">
<ul>
<xsl:call-template name="for_years">
<xsl:with-param name="current_year" select="/document/Год"/>
<xsl:with-param name="count_years" select="/document/ТекущийГод - 2000"/>
</xsl:call-template>
</ul>
<table>
<tbody>
<tr>
<xsl:choose>
<xsl:when test="/document/Месяц = 01">
<td class="act">
<span>январь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 01 > /document/ТекущийМесяц">январь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/01/">январь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 02">
<td class="act">
<span>февраль</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 02 > /document/ТекущийМесяц">февраль</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/02/">февраль</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 03">
<td class="act">
<span>март</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/Год and 03 > /document/ТекущийМесяц">март</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/03/">март</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 04">
<td class="act">
<span>апрель</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 04 > /document/ТекущийМесяц">апрель</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/04/">апрель</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 05">
<td class="act">
<span>май</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 05 > /document/ТекущийМесяц">май</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/05/">май</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 06">
<td class="act">
<span>июнь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 06 > /document/ТекущийМесяц ">июнь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/06/">июнь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
</tr>
<tr>
<xsl:choose>
<xsl:when test="/document/Месяц = 07">
<td class="act">
<span>июль</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 07 > /document/ТекущийМесяц">июль</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/07/">июль</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 08">
<td class="act">
<span>август</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 08 > /document/ТекущийМесяц">август</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/08/">август</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 09">
<td class="act">
<span>сентябрь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 09 > /document/ТекущийМесяц">сентябрь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/09/">сентябрь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 10">
<td class="act">
<span>октябрь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 10 > /document/ТекущийМесяц">октябрь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/10/">октябрь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 11">
<td class="act">
<span>ноябрь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 11 > /document/ТекущийМесяц">ноябрь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/11/">ноябрь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="/document/Месяц = 12">
<td class="act">
<span>декабрь</span>
</td>
</xsl:when>
<xsl:otherwise>
<td>
<xsl:choose>
<xsl:when test="/document/Год = /document/ТекущийГод and 12 > /document/ТекущийМесяц">декабрь</xsl:when>
<xsl:otherwise>
<a href="{blocks/url}{/document/Год}/12/">декабрь</a>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:otherwise>
</xsl:choose>
</tr>
</tbody>
</table>
</div>
<div class="item_list">
<!-- Отображение записи информационной системы -->
<xsl:apply-templates select="blocks/items/item[item_status=1]"/>
</div>
<xsl:if test="blocks/items/count_items > blocks/items/items_on_page">
<!-- Ссылка, для которой дописываются суффиксы page-XX/ -->
<xsl:variable name="link">
<xsl:value-of select="/document/blocks/url"/>
<xsl:if test="$parent_group_id != 0">
<xsl:value-of select="/document/blocks//group[@id = $parent_group_id]/fullpath"/>
</xsl:if>
<xsl:value-of select="Год"/>/<xsl:value-of select="Месяц"/>/</xsl:variable>
<div class="pager">
<h3>
<strong>Страницы</strong>
</h3>
<p>
<xsl:call-template name="for">
<xsl:with-param name="link" select="$link"/>
<xsl:with-param name="items_on_page" select="blocks/items/items_on_page"/>
<xsl:with-param name="current_page" select="blocks/items/current_page"/>
<xsl:with-param name="count_items" select="blocks/items/count_items"/>
<xsl:with-param name="visible_pages">5</xsl:with-param>
</xsl:call-template>
</p>
</div>
</xsl:if>
</xsl:template>
<!-- Данные о статьях -->
<xsl:template match="blocks/items/item">
<div class="article_one">
<br/>
<b>
<xsl:value-of disable-output-escaping="yes" select="substring(item_datetime,1,10)"/> |<xsl:value-of disable-output-escaping="yes" select="substring(item_datetime,11,6)"/></b>
<h2>
<a href="{item_path}">
<xsl:value-of disable-output-escaping="yes" select="item_name"/>
</a>
</h2>
<!-- Изображение для информационного элемента (если есть) -->
<xsl:if test="item_small_image!=''">
<img src="{item_small_image}" alt="{item_name}" align="left"/>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="item_description"/>
</div>
</xsl:template>
<!-- /// Метки для информационного элемента /// -->
<xsl:template match="tags/tag">
<a href="{/document/blocks/url}tag/{tag_path_name}/" class="tag">
<xsl:value-of select="tag_name"/>
</a>
<xsl:if test="position() != last()">,</xsl:if> </xsl:template>
<!-- Цикл для вывода строк ссылок -->
<xsl:template name="for">
<xsl:param name="i" select="0"/>
<xsl:param name="prefix">page</xsl:param>
<xsl:param name="link"/>
<xsl:param name="items_on_page"/>
<xsl:param name="current_page"/>
<xsl:param name="count_items"/>
<xsl:param name="visible_pages"/>
<xsl:variable name="n" select="$count_items div $items_on_page"/>
<!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
<xsl:variable name="parent_group_id" select="/document/blocks/parent_group_id"/>
<!-- Считаем количество выводимых ссылок перед текущим элементом -->
<xsl:variable name="pre_count_page">
<xsl:choose>
<xsl:when test="$current_page > ($n - (round($visible_pages div 2) - 1))">
<xsl:value-of select="$visible_pages - ($n - $current_page)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="round($visible_pages div 2) - 1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Считаем количество выводимых ссылок после текущего элемента -->
<xsl:variable name="post_count_page">
<xsl:choose>
<xsl:when test="0 > $current_page - (round($visible_pages div 2) - 1)">
<xsl:value-of select="$visible_pages - $current_page - 1"/>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="round($visible_pages div 2) = ($visible_pages div 2)">
<xsl:value-of select="$visible_pages div 2"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="round($visible_pages div 2) - 1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!--
<xsl:if test="$i = 0 and $current_page != 0">
<xsl:choose>
<xsl:when test="$current_page != 1">
<a href="{$link}page-{$current_page}/" style="color: #333;">← предыдущая</a>   </xsl:when>
<xsl:otherwise>
<a href="{$link}" style="color: #333;">← предыдущая</a>   </xsl:otherwise>
</xsl:choose>
</xsl:if>
-->
<!--
<xsl:if test="$i = 0 and $current_page != 0">
<span class="ctrl">←
Ctrl</span>
</xsl:if>
-->
<!--
<xsl:if test="$i >= $n and ($n - 1) > $current_page">
<span class="ctrl">Ctrl →</span>
</xsl:if>
-->
<!--
<xsl:if test="$i >= $n and ($n - 1) > $current_page">
<xsl:variable name="redo_link" select="$current_page + 2"/>
<a href="{$link}page-{$redo_link}/" style="color: #333;">следующая→</a>
</xsl:if>
-->
<xsl:if test="$count_items > $items_on_page and $n > $i">
<!-- Определяем адрес тэга -->
<xsl:variable name="tag_link">
<xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="count(/document/blocks/selected_tags/tag) != 0">tag/<xsl:value-of select="/document/blocks/selected_tags/tag/tag_path_name"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Определяем адрес ссылки -->
<xsl:variable name="number_link">
<xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="$i != 0">
<xsl:value-of select="$prefix"/>-<xsl:value-of select="$i + 1"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Ставим ссылку на страницу-->
<xsl:if test="$i != $current_page">
<!-- Выводим ссылку на первую страницу -->
<xsl:if test="$current_page - $pre_count_page > 0 and $i = 0">
<a href="{$link}" class="page_link" style="text-decoration: none;">первая</a> 
</xsl:if>
<xsl:choose>
<xsl:when test="$i >= ($current_page - $pre_count_page) and ($current_page + $post_count_page) >= $i">
<!-- Выводим ссылки на видимые страницы -->
<a href="{$link}{$tag_link}{$number_link}" class="page_link">
<xsl:value-of select="$i + 1"/>
</a> 
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
<!-- Выводим ссылку на последнюю страницу -->
<xsl:if test="$i+1 >= $n and $n > ($current_page + 1 + $post_count_page)">
<xsl:choose>
<xsl:when test="$n > round($n)">
<!-- Выводим ссылку на последнюю страницу -->
<a href="{$link}{$prefix}-{round($n+1)}/" class="page_link" style="text-decoration: none;">последняя</a>
</xsl:when>
<xsl:otherwise>
<a href="{$link}{$prefix}-{round($n)}/" class="page_link" style="text-decoration: none;">последняя</a>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:if>
<!-- Ссылка на предыдущую страницу для Ctrl + влево -->
<xsl:if test="$current_page != 0 and $i = $current_page">
<xsl:variable name="prev_number_link">
<xsl:choose>
<!-- Если не нулевой уровень -->
<xsl:when test="($current_page - 1) != 0">page-<xsl:value-of select="$i"/>/</xsl:when>
<!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<a href="{$link}{$tag_link}{$prev_number_link}" id="id_prev"></a>
</xsl:if>
<!-- Ссылка на следующую страницу для Ctrl + вправо -->
<xsl:if test="($n - 1) > $current_page and $i = $current_page">
<a href="{$link}{$tag_link}page-{$current_page+2}/" id="id_next"></a>
</xsl:if>
<!-- Не ставим ссылку на страницу-->
<xsl:if test="$i = $current_page">
<span class="current">
<xsl:value-of select="$i+1"/> 
</span>
</xsl:if>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="prefix" select="$prefix"/>
<xsl:with-param name="link" select="$link"/>
<xsl:with-param name="items_on_page" select="$items_on_page"/>
<xsl:with-param name="current_page" select="$current_page"/>
<xsl:with-param name="count_items" select="$count_items"/>
<xsl:with-param name="visible_pages" select="$visible_pages"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="for_years">
<xsl:param name="i" select="0"/>
<xsl:param name="current_year"/>
<xsl:param name="count_years"/>
<xsl:variable name="year" select="2000 + $count_years - $i"/>
<xsl:if test="$count_years>=$i ">
<li>
<xsl:choose>
<xsl:when test="/document/Год != $year">
<a href="{/document/blocks/url}{$year}/01/">
<xsl:value-of disable-output-escaping="yes" select="$year"/>
</a>
</xsl:when>
<xsl:otherwise>
<strong>
<xsl:value-of disable-output-escaping="yes" select="2000 + $count_years - $i"/>
</strong>
</xsl:otherwise>
</xsl:choose> </li>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for_years">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="current_year" select="$current_year"/>
<xsl:with-param name="count_years" select="$count_years"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="for_monts">
<xsl:param name="i" select="1"/>
<xsl:param name="current_mont"/>
<xsl:if test="12>=$i">
<xsl:variable name="td_class">
<xsl:choose>
<xsl:when test="/document/Месяц != $current_mont">class="act"</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
<xsl:call-template name="for_years">
<xsl:with-param name="i" select="$i + 1"/>
<xsl:with-param name="current_mont" select="$current_mont"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
2. Создать XSL-шаблон 'ПоказНовости' с кодом
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<xsl:template match="/">
<xsl:apply-templates select="/document/item"/>
</xsl:template>
<xsl:template match="/document/item">
<div class="article_one">
<h2>
<xsl:value-of disable-output-escaping="yes" select="item_name"/>
</h2>
<!-- Проверяем задан ли путь к файлу большого изображения -->
<xsl:if test="item_image !='' ">
<xsl:variable name="srcpath" select="item_image"/>
<a href="{item_image}"><img align="left" src="{item_small_image}"/>
</a>
</xsl:if>
<!-- Текст информационного элемента -->
<xsl:value-of disable-output-escaping="yes" select="item_text"/>
</div>
</xsl:template>
</xsl:stylesheet>
3. Создать новую типовую динамическую страницу.
4. В исходный код данной страницы вставить следующий код
<?php
$InformationSystem_id = to_int($GLOBALS['LA']['InformationSystemID']);
// Получаем информацию о текущем пользователе
if (class_exists('SiteUsers'))
{
$SiteUsers = & singleton('SiteUsers');
$site_user_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
$site_user_id = 0;
}
/* Массив внешних параметров, передаваемых в XML */
$external_propertys = array();
/* XSL шаблон для отображения списка элементов информационной системы */
$xsl_list = to_str($GLOBALS['LA']['xsl_information_system_list']);
/* XSL шаблон для отображения элемента информационной системы */
$xsl_item = to_str($GLOBALS['LA']['xsl_information_item']);
$InformationResult = $GLOBALS['InformationResult'];
/* Массив дополнительных параметров */
$property = array();
/* Число элементов на страницу */
if (isset($InformationResult['items_on_page']))
{
if ($InformationResult['items_on_page'] !== true)
{
$InformationResult['items_on_page'] = to_int($InformationResult['items_on_page']);
}
}
else
{
$InformationResult['items_on_page'] = 10;
}
/* Номер, с которого начинается показ */
if (isset($InformationResult['items_begin']))
{
$InformationResult['items_begin'] = to_int($InformationResult['items_begin']);
}
else
{
$InformationResult['items_begin'] = 0;
}
// Метод определения идентификатора информационной группы и идентификатора
// информационного элемента по значению URI
$result = $GLOBALS['LA_InformationSystem']->GetInformationFromPath($InformationSystem_id);
if ($result != false)
{
/* Вывод списка */
if ($result['item'] == false)
{
$external_propertys = array();
$external_propertys['ТекущийГод'] = date('Y');
$external_propertys['Год'] = $GLOBALS['year'];//date('Y');
$external_propertys['ТекущийМесяц'] = date('m');
$external_propertys['Месяц'] = $GLOBALS['mont'];//;
// Отображаем рейтинг новостей
$property = array();
$element['type'] = 0;
$element['prefix'] = ' and ';
$element['name'] = 'information_items_table.information_items_status';
$element['if'] = '=';
$element['value'] = '1';
$element['sufix'] = '';
$property['select'][] = $element;
$element['type'] = 0;
$element['prefix'] = ' and ';
$element['name'] = 'information_items_table.information_items_date';
$element['if'] = '>=';
$element['value'] = $GLOBALS['year'] . '-' . $GLOBALS['mont'] . '-01 00:00:00' ;
$element['sufix'] = '';
$property['select'][] = $element;
$element['type'] = 0;
$element['prefix'] = ' and ';
$element['name'] = 'information_items_table.information_items_date';
$element['if'] = '<=';
$element['value'] = $GLOBALS['year'] . '-' . $GLOBALS['mont'] . '-31 23:59:59' ;
$element['sufix'] = '';
$property['select'][] = $element;
/* Отображаем архив статей */
$GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $result['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
}
else
{
/* Определяем идентификатор информационного элемента */
$item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($result['item'], $result['group'], $InformationSystem_id);
/* Выводим статью */
$GLOBALS['LA_InformationSystem']->ShowInformationSystemItem($item_id, $xsl_item, $external_propertys);
}
}
?>
5. На вкладке Настройки страницы вставить следующий код:
<?php
$kernel = & singleton('kernel');
/* ID Информационной системы */
$InformationSystem_id = to_int($GLOBALS['LA']['InformationSystemID']);
/* Количество записей на страницу */
$items_on_page = to_int($GLOBALS['LA']['ItemsOnPage']);
$GLOBALS['LA_InformationSystem'] = & singleton('InformationSystem');
if ($items_on_page !== true)
{
$items_on_page = to_int($items_on_page);
}
$property = to_array($property);
/* Текстовая информация для указания номера страницы, например "страница" */
if (isset($GLOBALS['LA']['page']))
{
$property['page'] = to_str($GLOBALS['LA']['page']);
}
else
{
$property['page'] = 'страница';
}
/* Разделитель в заголовке страницы */
if (isset($GLOBALS['LA']['separator']))
{
$property['separator'] = to_str($GLOBALS['LA']['separator']);
}
else
{
$property['separator'] = ' / ';
}
$GLOBALS['InformationResult'] = array();
// Если указание на страницу - не прерываем определение
if (ereg ("^part-([0-9]*)$", end($GLOBALS['URL_ARRAY']), $regs) && to_int($regs[1]) > 0)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$break_if_path_not_found = false;
$GLOBALS['part_ii'] = $regs[1];
}
else
{
$break_if_path_not_found = false;
$GLOBALS['part_ii'] = 1;
}
$count_url_array = count($GLOBALS['URL_ARRAY']);
if (!isset($GLOBALS['URL_ARRAY'][1]))
{
$GLOBALS['year'] = date('Y');
}
else
{
$GLOBALS['year'] = to_str($GLOBALS['URL_ARRAY'][1]);
}
if (!isset($GLOBALS['URL_ARRAY'][2]))
{
$GLOBALS['mont'] = date('m');
}
else
{
$GLOBALS['mont'] = to_str($GLOBALS['URL_ARRAY'][2]);
}
if ($count_url_array >= 3)
{
unset($GLOBALS['URL_ARRAY'][1]);
unset($GLOBALS['URL_ARRAY'][2]);
}
/* получаем для пути ассоциативный массив с id группы и id/url элемента для данной инфосистемы */
$GLOBALS['INFSYS_result'] = $GLOBALS['LA_InformationSystem']->GetInformationFromPath($InformationSystem_id, '', $break_if_path_not_found);
/* Если путь существует */
if ($GLOBALS['INFSYS_result'])
{
/* получаем массив с деревом от текущей группы до корня */
$GLOBALS['LA_InformationSystem']->GetInformationGroupsForXml($GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$group_path='';
$mas_information_groups_for_xml=$GLOBALS['LA_InformationSystem']->get_mas_information_groups_for_xml();
/* получаем данные о группе */
$group_result=$GLOBALS['LA_InformationSystem']->SelectInformationGroups($GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$row_group=mysql_fetch_assoc($group_result);
/* получаем данные из seo - полей для групп */
$seo_title = trim($row_group['information_groups_seo_title']);
$seo_description = trim($row_group['information_groups_seo_description']);
$seo_keywords = trim($row_group['information_groups_seo_keywords']);
/* цикл по массиву с деревом для формирования пути по группам */
for($i = count($mas_information_groups_for_xml)-1; $i >= 0; $i--)
{
/* seo_title для группы пустое, то в заголовок подставляем название */
if (trim($mas_information_groups_for_xml[$i]['information_groups_seo_title'])=='')
{
$group_path.=$property['separator'].$mas_information_groups_for_xml[$i]['information_groups_name'];
}
else
{
$group_path.=$property['separator'].$mas_information_groups_for_xml[$i]['information_groups_seo_title'];
}
}
/* определяем название информационной системы */
$row = $GLOBALS['LA_InformationSystem']->GetInformationSystem($InformationSystem_id);
/* имя информационной системы */
$InformationSystem_name = $row['information_systems_name'];
/* Если вывод информационного элемента */
if ($GLOBALS['INFSYS_result']['item'])
{
/* определяем id информационного элемента */
$item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($GLOBALS['INFSYS_result']['item'], $GLOBALS['INFSYS_result']['group'], $InformationSystem_id);
$GLOBALS['InformationResult']['item_id'] = $item_id;
/* получаем данные об элементе */
$row_item = $GLOBALS['LA_InformationSystem']->GetInformationSystemItem($item_id);
/* проверяем если seo_title непустой, то в заголовок страницы подставляем его */
if (trim($row_item['information_items_seo_title']) != '')
{
$item_name = $property['separator'].trim($row_item['information_items_seo_title']);
}
else
{
/* имя элемента */
$item_name=$property['separator'].$row_item['information_items_name'];
}
}
else
{
/* Вывод информационной группы */
/* Определяем номер страницы для показа */
$end_array_item = end($GLOBALS['URL_ARRAY']);
$page = to_str($end_array_item);
if (ereg ("^page-([0-9]*)$", $page, $regs) && to_int($regs[1]) > 0)
{
/* Страница умножается на кол-во элементов, выводимых на страницу */
$items_begin = ($regs[1] - 1) * $items_on_page;
/* Если показываем группу, а не элемент, то указываем страницу (страница N), если она не первая */
$page_number = "{$property['separator']}{$property['page']} {$regs[1]}";
}
else
{
$items_begin = 0;
}
/* Массив, возвращаемый методом */
$GLOBALS['InformationResult']['items_begin'] = $items_begin;
}
if (isset($GLOBALS['INFSYS_result']['tag_name']))
{
$tag_name = "Метка: {$GLOBALS['INFSYS_result']['tag_name']} {$property['separator']}";
}
/* формируем заголовок страницы */
$new_title = 'Газета Республика Татарстан' . $property['separator'] . $InformationSystem_name . $group_path . to_str($item_name) . to_str($page_number);
}
else
{
// Элемент/группа не найдены, возвращаем 404 ошибку.
ShowHeader404();
if (to_str($_SERVER['REQUEST_URI']) != '/')
{
header('Location: /');
}
// Прекращаем выполнение
exit();
}
if (!empty($new_title))
{
/* отображаем группу, если не существует данных об элементе и родительская группа не является корнем */
if (!isset($row_item) && $GLOBALS['INFSYS_result']['group'] != 0 || isset($tag_name))
{
/* Заголовок для группы задан */
if (!empty($seo_title))
{
$kernel->set_title($seo_title);
}
else
{
$kernel->set_title($new_title);
}
/* Описание для группы задано */
if (!empty($seo_description))
{
$kernel->set_description($seo_description);
}
else
{
$kernel->set_description($new_title);
}
/* Ключевые слова для группы заданы */
if (!empty($seo_keywords))
{
$kernel->set_keywords($seo_keywords);
}
else
{
$kernel->set_keywords($new_title);
}
}
elseif (isset($row_item)) /* отображаем элемент */
{
if (!empty($row_item['information_items_seo_description']))
{
$kernel->set_title(trim($row_item['information_items_seo_title']));
}
else
{
$kernel->set_title($new_title);
}
/* Описание для элемента задано */
if (!empty($row_item['information_items_seo_description']))
{
$kernel->set_description(trim($row_item['information_items_seo_description']));
}
else
{
$kernel->set_description($new_title);
}
/* Ключевые слова для элемента заданы */
if (!empty($row_item['information_items_seo_keywords']))
{
$kernel->set_keywords(trim($row_item['information_items_seo_keywords']));
}
else
{
$kernel->set_keywords($new_title);
}
}
}
$GLOBALS['InformationResult']['items_on_page'] = $items_on_page;
?>
4. Для созданной типовой динамической страницы добавить следующие параметры:
Название параметра |Назв. переменной/Тип/Значен.|
----------------------------------------------------------
Код информационной системы | InformationSystemID/ |
| SQL-запрос/
|SELECT * FROM
|`information_systems_table`
|WHERE `site_id` = '{SITE_ID}'
|ORDER BY
|`information_systems_name`;
----------------------------------------------------------
Число выводимых элементов | ItemsOnPage/ |
на страницу | Поле ввода |
| |
----------------------------------------------------------
Разделитель в заголовке | separator/ |
страницы | Поле ввода/ |
| - |
----------------------------------------------------------
XSL шаблон для отображения |xsl_information_system_list |
списка элементов |XSl-шаблон |
информационной системы |АрхивНовостей |
----------------------------------------------------------
XSL шаблон для отображения |xsl_information_item |
элемента информационной |XSl-шаблон |
системы |ПоказНовости |
----------------------------------------------------------
6.Создать информационную систему. В приведенном примере все новости должны находиться в корне. Но это в дальнейшем можно исправить и добавить разделение по каталогам(месяцам/годам и т.д.)
7. Создать узел структуры, связать его с созданной выше информационной системой, а также сделать ее тип "Типовая динамическая страница" и связать с созданной выше типовой динамической страницой.
kvasiliy
31 декабря 2008 г.
а как сделать чтобы новости в календаль блались из архива новостей (новости получаются по RSS каналу)?
hostcms
Модератор
31 декабря 2008 г.
kvasiliy,
что такое "архив новостей" и при чем здесь RSS?
что такое "архив новостей" и при чем здесь RSS?
kvasiliy
31 декабря 2008 г.
Почему-то новость в календарь не добавляется если ставишь дату публикации или вообще любую дату, если без даты - то подставляется дата 30.11.1999 | 00:00
иначе новость не добавляется...
иначе новость не добавляется...
hostcms
Модератор
31 декабря 2008 г.
kvasiliy,
Я Вас не понимаю. При чем здесь добавление новости и календарь.
Я Вас не понимаю. При чем здесь добавление новости и календарь.
kvasiliy
13 января 2009 г.
Ну вообще как-бы посмотрел первое сообщение в данной теме:
"Есть ли какое-то типовое решение для создания архива (новостей, статей) в виде календаря?
например trud.ru/read/archiv.php, mk.ru/blogs/archive/MK/
если новость есть на дату ставится ссылка
и вывода на главную например последнего месяца (текущий месяц с подсветкой текущей даты)"
И решил поставить себе такой календарь, подумал - это наверняка как-то касаеться новостей.
Или для чего тагда этот календарь на сайте? Может я как-то не по русски прочитал?
"Есть ли какое-то типовое решение для создания архива (новостей, статей) в виде календаря?
например trud.ru/read/archiv.php, mk.ru/blogs/archive/MK/
если новость есть на дату ставится ссылка
и вывода на главную например последнего месяца (текущий месяц с подсветкой текущей даты)"
И решил поставить себе такой календарь, подумал - это наверняка как-то касаеться новостей.
Или для чего тагда этот календарь на сайте? Может я как-то не по русски прочитал?
Авторизация