Joomla 1.5 Смешение даты из-за временной зоны в модулях

Тема в разделе "Программирование", создана пользователем ZJIbIgeHb, 22.05.2012.

  1. Offline

    ZJIbIgeHb Недавно здесь

    Регистрация:
    09.07.2010
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    Доброе время суток, Уважаемые!

    Описываю проблему с которой столкнулся. И свято верю избавится с Вашей помощью. ^-^

    Есть как минимум 2 компонента, которые группируют созданные материалы по датам (mod_k2_tools и mod_articlebydates). Удивляет, что компоненты написаны обособленно друг от друга, но болячка одна и та же. А именно: при создании материалов (статей, новостей) с 00-00 часов до 03-00 часов 22 мая (для Москвы) эти материалы добавятся к группе материалов созданных 21 мая (то есть днём ранее). Соответственно я догоняю, что это происходит из-за того, что происходит группировка по датам в базе данных, которые указаны по Гринвичу. Соответственно, надо как-то прибавлять к извлекаемой дате (в моём случае это "publish_up") из базы 3 часа... Все возможные способы, которые подсказывал Google не помогают.

    p.s. Ноль в php и mysql, но методом тыка чаще всего достигаю поставленной задачи.

    p.p.s Поиск по сайту результатов не дал.

    Код хелпера mod_articlebydates
    Код (PHP):
    1. <?php
    2. defined('_JEXEC') or die('Direct Access to this location is not allowed.');
    3.  
    4. class ModArticleByDates {
    5.    
    6.        public function getArticles($args){
    7.       $db = &JFactory::getDBO();
    8.  
    9.       $nullDate = $db->getNullDate();
    10.       $date =& JFactory::getDate();
    11.       $now = $date->toMySQL();
    12.  
    13.       $category_id = $args['category_id'];
    14.       $no_of_items_select = $args['no_of_items_select'];
    15.       $no_of_chars = $args['no_of_chars'];
    16.       $order_by = $args['order_by'];
    17.      
    18.       $query  = "select cn.id, ca.alias as catalias, cn.alias as conalias, ";
    19.       $query .= "if (length(cn.title)>".$no_of_chars;
    20.       $query .= ",concat(substring(cn.title,1,".$no_of_chars."),'...'), ";
    21.       $query .= "cn.title) as title, ";
    22.       $query .= "publish_up ";
    23.       $query .= "from #__content as cn , ";
    24.       $query .= "#__categories as ca ";
    25.       $query .= "where cn.catid in (".$category_id.")";
    26.       $query .= " and state = 1 and ca.id=cn.catid ";
    27.  
    28.       $query .= ' and ( publish_up = '.$db->Quote($nullDate).' or publish_up <= '.$db->Quote($now).' )';
    29.       $query .= ' and ( publish_down = '.$db->Quote($nullDate).' or publish_down >= '.$db->Quote($now).' )';
    30.      
    31.       $query .= " order by publish_up ".$order_by;
    32.       $query .= " limit ".$no_of_items_select;
    33.        
    34.       $db->setQuery($query, $limitstart, $count);
    35.       $rows = $db->loadObjectList();
    36.       $items = ($items = $db->loadObjectList())?$items:array();
    37.    
    38.    
    39. }
     
    Последнее редактирование: 23.05.2012
  2.  
  3. Offline

    ZJIbIgeHb Недавно здесь

    Регистрация:
    09.07.2010
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    Решено:

    в файле tmpl/default.php
    Вместо:
    Код (PHP):
    1. $article_date = $item->publish_up;

    вставляем:
    Код (PHP):
    1. $article_date = date('d.m.Y H:i:s', strtotime($item->publish_up) + 3 * 60 * 60);
     

Поделиться этой страницей

Загрузка...