Календарь

#
Re: Календарь
ах да и код динамической

<?php

// Получаем информацию о текущем пользователе
if (class_exists('SiteUsers'))
{
   $SiteUsers = & singleton('SiteUsers');
   $site_user_id = $SiteUsers->GetCurrentSiteUser();
}
else
{
   $site_user_id = 0;
}

/* Массив внешних параметров, передаваемых в XML */
$external_propertys = array();

/* Добавление комментария */
// ShowAddComment == 1 - только авторизированные
// ShowAddComment == 2 - все
if (isset($_POST['add_comment'])
&& (($GLOBALS['LA']['ShowAddComment'] == 1 && $site_user_id > 0) || $GLOBALS['LA']['ShowAddComment'] == 2))
{
   $param['information_items_id'] = to_int($GLOBALS['InformationResult']['item_id']);

   /* XSL шаблон для отправки уведомления администратору о добавлении комментария */
   $param['admin_email_xsl'] = to_str($GLOBALS['LA']['xsl_admin_email']);

   $xsl_add_comment = to_str($GLOBALS['LA']['xsl_add_comment']);

   /* Режим добавления комментария:
   1 - публиковать сразу,
   0 - публиковать после проверки.*/
   if (to_bool($GLOBALS['LA']['TypeAddComment'])/* || $site_user_id > 0*/)
   {
      $param['status'] = 1;
   }
   else
   {
      $param['status'] = 0;
   }

   // Текст комментария
   $_POST['comment_text'] = nl2br(to_str($_POST['comment_text']));

   // Типографируем текст, если доступен модуль типографирования
   if (class_exists('typograph'))
   {
      $typograph = new typograph();
      $_POST['comment_text'] = $typograph->ProcessTypographic($_POST['comment_text']);
   }

   $param['comment_mail_type'] = to_int($GLOBALS['LA']['comment_mail_type']);

   // ID родительского комментария
   $param['comment_parent_id'] = to_int($_POST['comment_parent_id']);

   $param['comment_autor'] = to_str($_POST['comment_autor']);
   $param['comment_email'] = to_str($_POST['comment_email']);
   $param['comment_subject'] = to_str($_POST['comment_subject']);
   $param['comment_text'] = to_str($_POST['comment_text']);
   $param['comment_grade'] = to_int($_POST['comment_grade']);
   $param['allowable_tags'] = '<b><strong><i><u><strike><ul><ol><li>';

   ob_start();
   $GLOBALS['LA_InformationSystem']->ShowAddComment('УведомлениеДобавлениеКомментария', $param);
   $external_propertys[0]['xml_name'] = 'message';
   $external_propertys[0]['value'] = ob_get_clean();
}

$InformationSystem_id = to_int($GLOBALS['InformationSystem_id']);

// XSL шаблон для отображения списка элементов информационной системы
$xsl_list = to_str($GLOBALS['LA']['xsl_information_system_list']);

// XSL шаблон для отображения элемента информационной системы
$xsl_item = to_str($GLOBALS['LA']['xsl_information_item']);

$InformationResult = $GLOBALS['InformationResult'];

$count_external_propertys = count($external_propertys);

$external_propertys[$count_external_propertys]['xml_name'] = 'ОтображатьСсылкуНаАрхив';
$external_propertys[$count_external_propertys]['value'] = 0;


$external_propertys[++$count_external_propertys]['xml_name'] = 'ОтображатьСсылкиНаСледующиеСтраницы';
$external_propertys[$count_external_propertys]['value'] = 1;

// Массив дополнительных параметров
$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 ($GLOBALS['INFSYS_result'] != false)
{
   /* Вывод списка */
   if ($GLOBALS['INFSYS_result']['item'] == false)
   {
      // Если передано имя тэга - фильтруем
      if (isset($GLOBALS['INFSYS_result']['tag_name']))
      {
         $oTag = & singleton('Tag');

         $tag_row = $oTag->GetTagByName($GLOBALS['INFSYS_result']['tag_name']);

         $property['tags'] = array($tag_row['tag_id']);

         // При выводе тэгов вывод элементов ведется из всех групп
         $GLOBALS['INFSYS_result']['group'] = false;
      }



      // $property['xml_show_group_type'] = 'all';

      // Запрещаем передачу в XML свойств групп
      $property['xml_show_group_property'] = true;

      // Получаем список годов, для которых есть новости
      $query = "SELECT DISTINCT DATE_FORMAT(information_items_date, '%Y') as news_date FROM information_items_table
               WHERE information_systems_id = '1' AND information_items_status = '1'
               ORDER BY news_date DESC";

      $DataBase = & singleton ('DataBase');

      $result = $DataBase->select($query);
      $ExternalXml = new ExternalXml();

      $param_ext_xml = array();

      $year_ext_xml = array();
      $i = 0;

      while($row_date = mysql_fetch_assoc($result))
      {
         $year_ext_xml[$i]['xml_name'] = 'Год';
         $year_ext_xml[$i++]['value'] = intval($row_date['news_date']);
      }


      //$xmlData = $ExternalXml->GenXml($year_ext_xml, 1);

      $external_propertys[++$count_external_propertys]['xml_name'] = 'Годы';//$xmlData;
      $external_propertys[$count_external_propertys]['value'] = $year_ext_xml;


      // Передан год
      if (isset($GLOBALS['year']))
      {
         $element['type'] = 0;
         $element['prefix'] = ' AND ';
         $element['name'] = 'information_items_date';
         $element['if'] = '>=';
         $element['value'] = $GLOBALS['year'] . '-01-01 00:00:00';
         $element['sufix']='';
         $property['select'][] = $element;

         $element['type'] = 0;
         $element['prefix'] = ' AND ';
         $element['name'] = 'information_items_date';
         $element['if'] = '<=';
         $element['value'] = $GLOBALS['year'] . '-12-31 23:59:59';
         $element['sufix']='';
         $property['select'][] = $element;

         $external_propertys[++$count_external_propertys]['xml_name'] = 'ТекущийГод';
         $external_propertys[$count_external_propertys]['value'] = $GLOBALS['year'];


         $group_id = false;
      }
      else // Год не передан - отображаем по умолчанию
      {
         $group_id = $GLOBALS['INFSYS_result']['group'];
      }

      $property['GenXml_type'] = 1;

      /* Отображаем информационную систему */
      $GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $group_id, $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);
   }
   else
   {
      /* Определяем идентификатор информационного элемента */
      $item_id = $GLOBALS['LA_InformationSystem']->GetIdInformationItem($GLOBALS['INFSYS_result']['item'], $GLOBALS['INFSYS_result']['group'], $InformationSystem_id);

     $external_propertys = array();
$external_propertys[0]['xml_name'] = 'show_comments';

      if (to_bool($GLOBALS['LA']['ShowComments']))
      {
         $external_propertys[0]['value'] = '1';
      }
      else
      {
         $external_propertys[0]['value'] = '0';
      }

      // Кому разрешено добавление комментария
      $external_propertys['show_add_comments'] = to_int($GLOBALS['LA']['ShowAddComment']);

      $property['part'] = $GLOBALS['part_ii'];

      // Запрещаем передачу в XML свойств групп
      $property['xml_show_group_property'] = false;

      // Выводим элемент информационной системы
      // Для тех, кто поленился в структуре отредактировать и указать
      if (!isset($GLOBALS['LA']['CommentsOnPage']))
      {
         $GLOBALS['LA']['CommentsOnPage'] = 10;
      }

      $begin = to_int($GLOBALS['comment-page']);

      if ($begin <= 0)
      {
         $begin = 0;
         $param['begin'] = 0;
      }
      else
      {
         $begin--;
         $param['begin'] = $begin * to_int($GLOBALS['LA']['CommentsOnPage']);
      }

      $external_propertys['CommentsCurrentPage'] = $begin;

      $param['count'] = to_int($GLOBALS['LA']['CommentsOnPage']);
      $external_propertys['CommentsOnPage'] = $param['count'];

      // Выводим элемент информационной системы
      $GLOBALS['LA_InformationSystem']->ShowInformationSystemItem($item_id, $xsl_item, $external_propertys,
      $param);
   }
}
?>
ку
#
Re: Календарь
а как, используя самый первый код, вместо месяцев рисовать их календарные сетки, на xsl

допустим, сейчас май, заходим в архив, видим 5 месяцев-сеток, если есть события в какую-то дату на нее ставится ссылка, если нет - не ставится, соответственно переходим по ссылке видим список новостей в эту дату

ну тут простор для фантазии большой, можно еще даты мая позже сегодняшней выделять каким то цветом и тп.

Но главное:
как правильно генерировать эти сетки через xsl? (просто через table)
и как добавить 3 уровень фильтрации, по дням? чтобы например введя /2009/05/18/ выводились все сегодняшние новости
#
Re: Календарь
в настройках тип. дин. страницы в title упоминается "Газета Республика Татарстан" ))
и на сайте газеты есть календарик, подскажите, как он формируется? там как я понял, может быть только одно событие в единичную дату, а  можно ли несколько? чтобы как фильтр)
Модератор
#
Re: Календарь
h4mpy писал(а):
и на сайте газеты есть календарик, подскажите, как он формируется?

На сколько я помню в начале этой темы бли примеры как раз точно такого же календарика.

h4mpy писал(а):
там как я понял, может быть только одно событие в единичную дату, а можно ли несколько

Почему, может быть несколько, при выборе по ссылке с календарика должны отображаться несколько.
#
Re: Календарь
так календарик, что в начале темы состоит только из списка годов и месяцев, без сетки по дням, фильтрация по дням тоже не учитывается, только месяцы
#
Re: Календарь
День добрый, подскажите как можно подключить дефолтный календарь так чтоб бы при нажатии на конкретное число выводились новости созданые этого числа?
Отлично насколько это возможно
Модератор
#
Re: Календарь
Что Вы имеете в виду под "дефолтным календарем"?

Для создания календаря необходимо:
1. Нарисовать календарь.
2. Автоматически давать с дней календаря ссылки по схеме, например,
{путь к ИС}/date/07/08/2009/

3. Обработать нажатие ссылок, т.е. отобразить новости за конкретный день.

Пример отображения новостей за определенный день(с учетом того, что ссылки с дней формируются по приведенной выше схеме).

В НАСТРОЙКИ стандартной типовой динамической страницы "Информационные системы" ПЕРЕД кодом

// Если указание на страницу - не прерываем определение
if (ereg ("^part-([0-9]*)$", end($GLOBALS['URL_ARRAY']), $regs) && to_int($regs[1]) > 0)
...

вставляете следующий код

$structure = new Structure();
$GLOBALS['InformationResult'] = array();

// Получаем информацию о информационной системе
$information_system_row = $GLOBALS['LA_InformationSystem']->GetInformationSystem($InformationSystem_id);

$structure_path = $structure->GetStructurePath($information_system_row['structure_id'], 1);

$count_structure_path = count($structure_path);

// Переходим по ссылке с календаря
if ($GLOBALS['URL_ARRAY'][$count_structure_path] == 'date')
{
   // Получаем информацию о дате новости
   $day = to_int($GLOBALS['URL_ARRAY'][($count_structure_path+1)]);   
   $month = to_int($GLOBALS['URL_ARRAY'][($count_structure_path+2)]);
   $year = to_int($GLOBALS['URL_ARRAY'][($count_structure_path+3)]);

   // В цикле удаляем из пути информацию о дате
   for ($i = 0; $i < 4; $i++)
   {
      unset($GLOBALS['URL_ARRAY'][($count_structure_path+$i)]);   
   }   
   
   // Формируем дату для поиска новостей
   $GLOBALS['news_date'] = $year . '-' . $month . '-' . $day;   
}


В "Код страницы" той же типовой динамической страницы ПЕРЕД кодом

/* Отображаем информационную систему */      $GLOBALS['LA_InformationSystem']->ShowInformationSystem($InformationSystem_id, $GLOBALS['INFSYS_result']['group'], $xsl_list, $InformationResult['items_on_page'], $InformationResult['items_begin'], $external_propertys, $property);

вставляете следующий код


// Показ новостей за определенную дату
if (isset($GLOBALS['news_date']))
{
    $element['type'] = 0;
    $element['name'] = 'information_items_date';
    $element['prefix'] = ' AND ';  
    $element['if'] = '>=';    
    $element['value'] = $GLOBALS['news_date'] . ' 00:00:01';    
    $element['sufix']=" ";
    $property['select'][] = $element;

    $element['type'] = 0;
    $element['name'] = 'information_items_date';
    $element['prefix'] = ' AND ';  
    $element['if'] = '<=';    
    $element['value'] = $GLOBALS['news_date'] . ' 23:59:59';    
    $element['sufix']=" ";
    $property['select'][] = $element;

    $GLOBALS['INFSYS_result']['group'] = false;
}


#
Re: Календарь
Дефолтный это ваш стандартный... мне он очень понравился...
Отлично насколько это возможно
Модератор
#
Re: Календарь
veyr,
используйте его, только внутри JS добавьте ссылки.
#
Re: Календарь
Undefined offset: 1 в файле /home/vaho/public_html/edi/lib/lib_1/lib_config_1.php (строка 54) почему то высвечивается такая вот ошибка... в чем ошибка?
Отлично насколько это возможно
Авторизация