Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по вёрстке » Как сделать автозамена времени на дату?

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


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

вопрос
Интересует небольшая модификация в шаблоне. На фото я выделил время и дату публикации. Только верхний пост опубликован сегодня. Остальные посты в прошлые дни. Вот собственно задача: нужно чтобы сегодняшние посты выводились с временем публикации, но после полуночи эти числа изменялись на дата/месяц. (пример на втором фото)
Вот этот код отвечает за вывод как я понял:
<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
Юзер

pavel31 - 9 марта 2015 21:09 -

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

gulllak
Юзер

gulllak - 9 марта 2015 21:38 -

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

pavel31
Юзер

pavel31 - 9 марта 2015 22:00 -

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

gulllak
Юзер

gulllak - 9 марта 2015 22:15 -

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

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

pavel31
Юзер

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
Юзер

gulllak - 9 марта 2015 22:54 -

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

webil
Юзер

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
Юзер

gulllak - 10 марта 2015 00:47 -

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

webil
Юзер

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
Юзер

webil - 10 марта 2015 02:41 -

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

gulllak
Юзер

gulllak - 10 марта 2015 08:44 -

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

pavel31
Юзер

pavel31 - 10 марта 2015 01:11 -

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

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

gulllak
Юзер

gulllak - 10 марта 2015 01:26 -

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

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

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

наверх