Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по вёрстке Как сделать автозамена времени на дату?

Как сделать автозамена времени на дату?


     09.03.2015    Общие вопросы по вёрстке, Шаблоны (TPL)    1167

вопрос
Интересует небольшая модификация в шаблоне. На фото я выделил время и дату публикации. Только верхний пост опубликован сегодня. Остальные посты в прошлые дни. Вот собственно задача: нужно чтобы сегодняшние посты выводились с временем публикации, но после полуночи эти числа изменялись на дата/месяц. (пример на втором фото)
Вот этот код отвечает за вывод как я понял:
<div class="custom-6">
<div class="b_date">{date=H:m}</div>
<h2 class="custom-title5"><a href="{full-link}" title="{title}" >{title}</a>
<span class="b_comm"><a href="{full-link}#mc-container" data-cackle-channel="{news-id}" style="color:#fff"></a></span>
</h2>
</div>

Как сделать автозамена времени на дату?

Как сделать автозамена времени на дату?

Ответил: gulllak


В файле /engine/modules/show.short.php (я добавлял в show.custom.php)
перед строкой
$news_date = $row['date'];



Добавить это:

if( date( 'Ymd', $row['date'] ) == date( 'Ymd', $_TIME ) ){
    $tpl->set( '[not-date]', "" );
    $tpl->set( '[/not-date]', "" );
    $tpl->set_block( "'\\[date\\](.*?)\\[/date\\]'si", "" );
}else{
    $tpl->set( '[date]', "" );
    $tpl->set( '[/date]', "" );
    $tpl->set_block( "'\\[not-date\\](.*?)\\[/not-date\\]'si", "" );
}



В краткой новости вызывать так:

[not-date]{date=H:i}[/not-date] [date]{date=d.m.Y}[/date]

Спасибо пользователю webil

Комментарии пользователей (13)

pavel31
4

343 | 158

pavel31 - 9 марта 2015 21:09 - Юзер

Замените
{date=H:m}
на
{date=d.m.y}

gulllak
1

10

gulllak - 9 марта 2015 21:38 - Юзер

Ну тогда будет просто отображаться всегда так. А мне нужно чтобы сегодняшние новости отображались со временем, а вчерашние и прошлые с датой. К примеру публикую я сегодня новость в 23:30, а потом в 00:25. Так вот, после 00:00, время всех предыдущих новостей должно преобразиться в как бы "вчера" и принять формат дата/месяц.

pavel31
4

343 | 158

pavel31 - 9 марта 2015 22:00 - Юзер

Ну тогда попробуйте просто тег {date} так же может в адмике что-то отключено

gulllak
1

10

gulllak - 9 марта 2015 22:15 - Юзер

Так не работает.
Нужно условие:
если сегодня тогда {date=H:i}
иначе {date=d/m}

Или что-то такое.

pavel31
4

343 | 158

pavel31 - 9 марта 2015 22:36 - Юзер

На php делается так:

function formatDate($date_format, $date) {
    $day_start = mktime('00', '00', '00', date("m"),  date("d"),  date("Y"));
    $day_end = mktime('23', '59', '59', date("m"),  date("d"),  date("Y"));
    $day_yesterday = $day_start - (3600 * 24);
    if(($date >= $day_start) AND ($date <= $day_end) AND ($config['offest_date_format'])) {
        $return = "Сегодня, " . langdate("H:i", $date);
    }
    elseif(($date >= $day_yesterday) AND ($config['offest_date_format'])) {
        $return = "Вчера, " . langdate("H:i", $date);
    }
    else {
        $return = langdate($date_format, $date);
    }
    return $return;
}

$curdate = formatDate($config['date_format'], $row['date']);
echo $curdate;

$row['date'] - массив с датой и временем;

gulllak
1

10

gulllak - 9 марта 2015 22:54 - Юзер

Спасибо! А как вызвать эту функцию?

webil
5

9 | 2

webil - 9 марта 2015 23:55 - Юзер

в файле /engine/modules/show.short.php
перед строкой
$news_date = $row['date'];


добавить это:

if( date( 'Ymd', $row['date'] ) == date( 'Ymd', $_TIME ) ){
    $tpl->set( '[not-date]', "" );
    $tpl->set( '[/not-date]', "" );
    $tpl->set_block( "'\\[date\\](.*?)\\[/date\\]'si", "" );
}else{
    $tpl->set( '[date]', "" );
    $tpl->set( '[/date]', "" );
    $tpl->set_block( "'\\[not-date\\](.*?)\\[/not-date\\]'si", "" );
}


в краткой новости вызывать так:

[not-date]{date=H:i}[/not-date] [date]{date=d.m.Y}[/date]

gulllak
1

10

gulllak - 10 марта 2015 00:47 - Юзер

Не работает вывод в [not-date]. Только тег [date] воспринимается.

webil
5

9 | 2

webil - 10 марта 2015 02:17 - Юзер

Странно у меня все работает... Может версия движка другая(у меня 10.2) и там что-то иначе должно быть.

сделайте тогда по другому:

все в том же файле за место того что я сказал выше:

перед строчкой:
$tpl->set( '{date}', $lang['time_heute'] . langdate( ", H:i", $row['date'] ) );

вставляем это:
$tpl->set( '[not-date]', "" );
$tpl->set( '[/not-date]', "" );
$tpl->set_block( "'\\[date\\](.*?)\\[/date\\]'si", "" );


перед строчкой:
$tpl->set( '{date}', $lang['time_gestern'] . langdate( ", H:i", $row['date'] ) );

вставляем это:
$tpl->set( '[not-date]', "" );
$tpl->set( '[/not-date]', "" );
$tpl->set_block( "'\\[date\\](.*?)\\[/date\\]'si", "" );


перед строчкой:
$tpl->set( '{date}', langdate( $config['timestamp_active'], $row['date'] ) );

вставить это:
$tpl->set( '[date]', "" );
$tpl->set( '[/date]', "" );
$tpl->set_block( "'\\[not-date\\](.*?)\\[/not-date\\]'si", "" );

webil
5

9 | 2

webil - 10 марта 2015 02:41 - Юзер

Так же стоит заметить что время в данном случае используется серверное а не локальное.
что вы имели в виду говоря?
Не работает вывод в [not-date].

gulllak
1

10

gulllak - 10 марта 2015 08:44 - Юзер

Извиняюсь! Все работает! Спасибо вам большое!)

pavel31
4

343 | 158

pavel31 - 10 марта 2015 01:11 - Юзер

gulllak,
Вызов функции
$curdate = formatDate($config['date_format'], $row['date']);

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

gulllak
1

10

gulllak - 10 марта 2015 01:26 - Юзер

Тоже не работает:) Или не туда вставляю.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы