Календарь

#
Календарь
Есть ли какое-то типовое решение для создания архива (новостей, статей) в виде календаря?
например trud.ru/read/archiv.php , mk.ru/blogs/archive/MK/
если новость есть на дату ставится ссылка
и вывода на главную например последнего месяца (текущий месяц с подсветкой текущей даты)
#
Re: Календарь
Присоединяюсь к вопросу
#
Re: Календарь
h4mpy, на этот вопрос уже есть ответ

http://www.hostcms.ru/forums/20/496/
#
Re: Календарь
хотелось бы на xsl, тут первая задача сделать автоматическое формирование архива
допустим по умолчанию выводятся только новости текущего месяца, остальные уходят в архив по месяцам и годам, сетку то в принципе не проблема сделать
и путь бы формировался /news/2008/10/08/ например
вот неплохо сделано..www.eabr.org/rus/media/press/
последний месяц, его сетка и фильтр по месяцам-годам

в общем хотелось бы что-то для новостных сайтов, самостоятельно ничего хорошего не получается/

+интересно как сделано на vsesmi.ru/today_news/ ? там есть деление год-месяц-день, как это формируется?
Модератор
#
Re: Календарь
Для реализации данного архива Вам необходимо сделать следующее:
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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; /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 &gt; 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)"/>&#xA0;|<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>&#xA0;</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 &gt; ($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 &gt; $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;">&#x2190; предыдущая</a>&#xA0;&#xA0;&#xA0;</xsl:when>
               <xsl:otherwise>
                  <a href="{$link}" style="color: #333;">&#x2190; предыдущая</a>&#xA0;&#xA0;&#xA0;</xsl:otherwise>
            </xsl:choose>
         </xsl:if>
         -->
<!--
      <xsl:if test="$i = 0 and $current_page != 0">
         <span class="ctrl">&#x2190;
             Ctrl</span>
      </xsl:if>
      -->

<!--
      <xsl:if test="$i &gt;= $n and ($n - 1) &gt; $current_page">
         <span class="ctrl">Ctrl &#x2192;</span>
      </xsl:if>
      -->
      <!--
      <xsl:if test="$i &gt;= $n and ($n - 1) &gt; $current_page">
            <xsl:variable name="redo_link" select="$current_page + 2"/>
            <a href="{$link}page-{$redo_link}/" style="color: #333;">следующая&#x2192;</a>
         </xsl:if>
         -->

      <xsl:if test="$count_items &gt; $items_on_page and $n &gt; $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 &gt; 0 and $i = 0">
               <a href="{$link}" class="page_link" style="text-decoration: none;">первая</a>&#xA0;
            </xsl:if>

            <xsl:choose>
               <xsl:when test="$i &gt;= ($current_page - $pre_count_page) and ($current_page + $post_count_page) &gt;= $i">
                  <!-- Выводим ссылки на видимые страницы -->
                  <a href="{$link}{$tag_link}{$number_link}" class="page_link">
                     <xsl:value-of select="$i + 1"/>
                  </a>&#xA0;
               </xsl:when>
               <xsl:otherwise></xsl:otherwise>
            </xsl:choose>

            <!-- Выводим ссылку на последнюю страницу -->
            <xsl:if test="$i+1 &gt;= $n and $n &gt; ($current_page + 1 + $post_count_page)">
               <xsl:choose>
                  <xsl:when test="$n &gt; 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) &gt; $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"/>&#xA0;
            </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&gt;=$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>&#xA0;</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&gt;=$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. Создать узел структуры, связать его с созданной выше информационной системой, а также сделать ее тип "Типовая динамическая страница" и связать с созданной выше типовой динамической страницой.
#
Re: Календарь
а как сделать чтобы новости  в календаль блались из архива новостей (новости получаются по RSS каналу)?
Модератор
#
Re: Календарь
kvasiliy,
что такое "архив новостей" и при чем здесь RSS?
#
Re: Календарь
Почему-то новость в календарь не добавляется если ставишь дату публикации или вообще любую дату, если без даты - то подставляется дата 30.11.1999 | 00:00
иначе новость не добавляется...
Модератор
#
Re: Календарь
kvasiliy,
Я Вас не понимаю. При чем здесь добавление новости и календарь.
#
Re: Календарь
Ну вообще как-бы посмотрел первое сообщение в данной теме:
"Есть ли какое-то типовое решение для создания архива (новостей, статей) в виде календаря?
например trud.ru/read/archiv.php, mk.ru/blogs/archive/MK/
если новость есть на дату ставится ссылка
и вывода на главную например последнего месяца (текущий месяц с подсветкой текущей даты)"

И решил поставить себе такой календарь, подумал - это наверняка как-то касаеться новостей.
Или для чего тагда этот календарь на сайте? Может я как-то не по русски прочитал?
Авторизация