Форум русской поддержки Joomla!® CMS
04.12.2016, 20:16:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Время подачи объявления и обновление раз в сутки

 (Прочитано 2451 раз)
0 Пользователей и 1 Гость смотрят эту тему.
max_1985
Завсегдатай
*****

Репутация: +55/-0
Offline Offline

Сообщений: 598



« : 13.07.2012, 17:57:55 »

Как реализовать чтоб к дате выводилось еще и время?

Для отображения даты я так понимаю используется ф-ция:
function reorderDate( $date ){
      $format = JText::_('ADSMANAGER_DATE_FORMAT_LC');
      
      if ($date && (preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/",$date,$regs))) {
         $date = mktime( 0, 0, 0, $regs[2], $regs[3], $regs[1] );
         $date = $date > -1 ? strftime( $format, $date) : '-';
      }
      return $date;
   }
и echo $this->reorderDate($content->date_created);
Может можно как поправить, подскажите!
« Последнее редактирование: 14.07.2012, 23:15:51 от max_1985 » Записан
Grendy
Давно я тут
****

Репутация: +24/-0
Offline Offline

Пол: Мужской
Сообщений: 247


« Ответ #1 : 13.07.2012, 19:59:19 »

Как реализовать?

Для отображения даты я так понимаю используется ф-ция:
function reorderDate( $date ){
      $format = JText::_('ADSMANAGER_DATE_FORMAT_LC');
      
      if ($date && (preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/",$date,$regs))) {
         $date = mktime( 0, 0, 0, $regs[2], $regs[3], $regs[1] );
         $date = $date > -1 ? strftime( $format, $date) : '-';
      }
      return $date;
   }
и echo $this->reorderDate($content->date_created);
Может можно как поправить, подскажите!

Хм. Дата подачи - дата размещения? Тогда в чём, собственно, вопрос, если код вы уже привели?

Дата создания = дата "подачи" = дата размещения = $this->content->date_created

Вообще просто вывести дату размещения можно простым <?php echo $this->content->date_created; ?>, а предложенная вами функция приводит её к определённому виду. Если конкретизировать ответ, функция отбрасывает время размещения и немного меняет формат даты (из 2012-07-13 в 13.07.2012).

Не знаете, куда вставить код функции? Нужно именно "число:месяц:год час:минута:секунды" ? Или что-то другое? Опишите задачу поконкретнее...
Записан
Grendy
Давно я тут
****

Репутация: +24/-0
Offline Offline

Пол: Мужской
Сообщений: 247


« Ответ #2 : 13.07.2012, 20:22:31 »

На всякий случай, если дело действительно ограничивалось часами и минутами...

Самый лёгкий способ: в файле русификации (ru-RU.com_adsmanager.ini) (или в файле, который соответствует используемому на сайте языку) ищите строчку ADSMANAGER_DATE_FORMAT_LC и дописывайте/удаляйте ненужное.

К примеру, значение "%H:%M %d.%m.%Y" будет выводить дату и время в формате "Час:Минуты День.Месяц.Год". При желании можно добавить ещё и секунды (но зачем?) - %H:%M:%S.

Лично я вижу один небольшой минус: когда человек будет обновлять объявление, часы и минуты будут сбрасываться на 00:00, что в итоге и отобразится на сайте. Очень некрасиво будет смотреться...
Записан
max_1985
Завсегдатай
*****

Репутация: +55/-0
Offline Offline

Сообщений: 598



« Ответ #3 : 13.07.2012, 20:40:35 »

Нужно число:месяц:год
             час:минута
%H:%M - если я это добавляю то во всех объявлениях даже только-что поданых, везде 00:00
http://bezgazet.kiev.ua/all_ads.html
« Последнее редактирование: 13.07.2012, 23:55:49 от max_1985 » Записан
max_1985
Завсегдатай
*****

Репутация: +55/-0
Offline Offline

Сообщений: 598



« Ответ #4 : 13.07.2012, 23:15:11 »

Сделал так:
if ( $date && ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2})[ ]([0-9]{2})Sad[0-9]{2})Sad[0-9]{2})", $date, $regs ) ) {
$date = mktime( $regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1] );
$date = $date > -1 ? strftime( $format, $date + ($offset*60*60) ) : '-';
}
и "%H:%M %d.%m.%Y"
Все вроде нормально показывает но,
Теперь при обновлении объявления время становится 00:00 и объявление соответственно не в самом верху. (в принципе эта проблема у Всех, заметьте если обновляешь объявление и в этот день кто-то публиковал объявление, то Ваше будет ниже )
Как решить?

Может здесь что-то изменить:
<?php echo JText::_('ADSMANAGER_EXPIRATION_DATE')?>: <?php echo $this->reorderDate($content->expiration_date)?>
или что-то в базе надо поправить?
« Последнее редактирование: 14.07.2012, 01:15:33 от max_1985 » Записан
Grendy
Давно я тут
****

Репутация: +24/-0
Offline Offline

Пол: Мужской
Сообщений: 247


« Ответ #5 : 14.07.2012, 04:28:16 »

Сделал так:
if ( $date && ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2})[ ]([0-9]{2})Sad[0-9]{2})Sad[0-9]{2})", $date, $regs ) ) {
$date = mktime( $regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1] );
$date = $date > -1 ? strftime( $format, $date + ($offset*60*60) ) : '-';
}
и "%H:%M %d.%m.%Y"
Все вроде нормально показывает но,
Теперь при обновлении объявления время становится 00:00 и объявление соответственно не в самом верху. (в принципе эта проблема у Всех, заметьте если обновляешь объявление и в этот день кто-то публиковал объявление, то Ваше будет ниже )
Как решить?

Может здесь что-то изменить:
<?php echo JText::_('ADSMANAGER_EXPIRATION_DATE')?>: <?php echo $this->reorderDate($content->expiration_date)?>
или что-то в базе надо поправить?

А нужно, чтобы оно в самый верх попадало при обновлении? Злоупотреблять функцией начнут же Azn

Чтобы всё делалось "автоматом", смотрите в сторону функции function renewContent в файле administrator/components/com_adsmanager/models/content.php. Скорее всего, в ней достаточно будет заменить date_created = CURDATE() на что-то, что бы учитывало ещё и Часы:Минуты, когда нажали на кнопочку "Продлить". Как вариант, можно посмотреть в сторону функции сохранения объявления (в каком файле находится функция, не знаю) при размещении и оттуда выдернуть нужное.

Не знаю, будет ли это решением, так как проверить не на чём, но можно сделать следующее:

В файле administrator/components/com_adsmanager/models/content.php в функции renewContent находим строчки

Код:
$newdate = date("Y-m-d",$time);

$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = '$newdate', date_created = CURDATE(),recall_mail_sent=0,published=1 WHERE id=".(int)$contentid." and recall_mail_sent = 1");

Создаём и дописываем переменную $newdatecr и правим запрос, чтобы в итоге получилось следующее

Код:
$newdate = date("Y-m-d",$time);
$newdatecr = date("Y-m-d H:i:s");
$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = '$newdate', date_created = '$newdatecr',recall_mail_sent=0,published=1 WHERE id=".(int)$contentid." and recall_mail_sent = 1");

Должно будет записываться то время, в которое пользователь нажал на кнопочку "Продлить" (либо "Обновить"). Проверьте, возможно, это и есть решение.
Записан
max_1985
Завсегдатай
*****

Репутация: +55/-0
Offline Offline

Сообщений: 598



« Ответ #6 : 14.07.2012, 10:05:56 »

Сейчас при обновлении записывается  дата и время создания объявления.

Да забыл сказать что ф-ция renewContent у меня имеет вид:

Код:
function renewContent($contentid,$ad_duration)
{

$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = DATE_ADD(CURDATE(), INTERVAL +$ad_duration DAY), date_created = CURDATE(),recall_mail_sent=0,published=1 WHERE id=".(int)$contentid);
$this->_db->query();
}
Отличается от исходного наверно что-то менял.
« Последнее редактирование: 14.07.2012, 10:36:01 от max_1985 » Записан
max_1985
Завсегдатай
*****

Репутация: +55/-0
Offline Offline

Сообщений: 598



« Ответ #7 : 14.07.2012, 12:23:28 »

Сделал:
CURDATE() заменил на NOW()

Было бы не плохо сделать чтоб юзер мог обновлять объявление раз в сутки
« Последнее редактирование: 14.07.2012, 12:47:22 от max_1985 » Записан
max_1985
Завсегдатай
*****

Репутация: +55/-0
Offline Offline

Сообщений: 598



« Ответ #8 : 08.10.2012, 22:10:48 »

Может кто решил чтоб обновлять объявление можно было раз в сутки?
Записан
girlwolf
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 118


« Ответ #9 : 31.03.2013, 13:22:42 »

Возможность обновления (поднятия) объявлений раз в сутки:

В файле administrator/components/com_adsmanager/models/content.php заменить функцию RenewContent на эту:

Код:
function renewContent($contentid,$ad_duration)
{
$this->_db->setQuery( "SELECT date_created FROM #__adsmanager_ads WHERE id = ".(int)$contentid);
$obnovka_date = $this->_db->loadResult();
$time = strtotime($obnovka_date);
$time = $time + (3600 *24);


if (time() > $time){
$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = DATE_ADD(NOW(), INTERVAL +$ad_duration DAY), date_created = NOW(),recall_mail_sent=0,published=1 WHERE id=".(int)$contentid);
$this->_db->query();
}

}
Записан
max_1985
Завсегдатай
*****

Репутация: +55/-0
Offline Offline

Сообщений: 598



« Ответ #10 : 31.03.2013, 21:57:08 »

Возможность обновления (поднятия) объявлений раз в сутки:

В файле administrator/components/com_adsmanager/models/content.php заменить функцию RenewContent на эту:

Код:
function renewContent($contentid,$ad_duration)
{
$this->_db->setQuery( "SELECT date_created FROM #__adsmanager_ads WHERE id = ".(int)$contentid);
$obnovka_date = $this->_db->loadResult();
$time = strtotime($obnovka_date);
$time = $time + (3600 *24);


if (time() > $time){
$this->_db->setQuery( "UPDATE #__adsmanager_ads SET expiration_date = DATE_ADD(NOW(), INTERVAL +$ad_duration DAY), date_created = NOW(),recall_mail_sent=0,published=1 WHERE id=".(int)$contentid);
$this->_db->query();
}

}
Что-то не прокатило.
Записан
Frics
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 28


« Ответ #11 : 30.09.2015, 21:21:53 »

Подскажите как изменить часовой пояс? вывод объявления с часами и минутами получилось вот только время московское а мне нужно на два часа позже
Записан
СерьёгА
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 19


« Ответ #12 : 05.10.2015, 00:31:00 »

Что-то не прокатило.
Решил проблему?
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet