Сравнить дату сознания поста в блоге с текущей

 
Посетитель
no avatar
Сообщений: 15
InstantCMS v1.10.4

mod_blogs.tpl
Код PHP:
  1. {foreach key=tid item=post from=$posts}
  2. {if $post.fpubdate > ВОТ_ТУТ_ЧТО_НАПИСАТЬ} // если дата публикации БОЛЬШЕ (сегодняшняя дата МИНУС 3 дня)
  3. <div class="mod_latest_entry new">
  4. ...
  5. {else}
  6. <div class="mod_latest_entry old">
  7. ...
  8.  
  9. {/if}
ВОТ_ТУТ_ЧТО_НАПИСАТЬ - условие: если запись опубликована не более 3 дней назад
Редактировалось: 2 раз (Последний: 18 октября 2016 в 17:34)
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
ВОТ_ТУТ_ЧТО_НАПИСАТЬ
Что бы тут что то написать, нужно это что то сюда передать из файла frontend.php.
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2610
date("Y:m:d", strtotime("now +3 days"))
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Ris:
date("Y:m:d", strtotime("now +3 days"))
Круто. smile
И как php ф-ция будет в смарти работать? Наверное стоило дописать, что эту ф-цию нужно передать из php. Хотя Имхо.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2610
Lora,
Там первая ветка что ли? shock

Точно... не обратил внимания в первом посте.
Редактировалось: 1 раз (Последний: 18 октября 2016 в 20:50)
Посетитель
no avatar
Сообщений: 15
Ris:

date("Y:m:d", strtotime("now +3 days"))

Код PHP:
  1. {php}
  2. $tdd = date("d:m:Y", strtotime("now -3 days"));
  3. echo $tdd; // 16:10:2016
  4. {/php}
  5.  
  6. {foreach key=tid item=post from=$posts}
  7. {if $post.fpubdate > $tdd} // а $post.fpubdate выводится как 14 октября 2016
  8. <div class="mod_latest_entry ramaf">
  9. ...
  10. {$post.fpubdate} - <a href="{$post.blog_url}">{$post.blog_title}</a>
  11. ...
  12. </div>
  13. {else}
Как я понимаю тут {if $post.fpubdate > $tdd} разные типы/форматы дат. И сравниваются они некорректно.Сейчас всегда срабатывается первое условие. Хотя должно только {else}.

*В БД pubdate имеет тип datetime с примеру: 2014-08-07 13:30:17
Редактировалось: 2 раз (Последний: 19 октября 2016 в 17:50)
Посетитель
no avatar
Сообщений: 15
Попробовал strtotime, но не помогло.
Код PHP:
  1. {php}
  2. $tdd2 = date("d:m:Y", strtotime($post.fpubdate));
  3. echo $tdd2; // выводит 01:01:1970
  4. {/php}
Код PHP:
  1. {php}
  2. $tdd2 = date("d:m:Y", strtotime($post.pubdate));
  3. echo $tdd2; // тоже выводит 01:01:1970
  4. {/php}
Редактировалось: 1 раз (Последний: 19 октября 2016 в 17:49)
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
В модуле (module.php) после
Код PHP:
  1.  
  2. $posts = $inBlog->getPosts(false, $model);
  3. if(!$posts){ return false; }
Код PHP:
  1. foreach($posts as $val){$data = $val['fpubdate'];
  2. $three_day_later = date("Y-m-d ",mktime(0, 0, 0, date("m") , date("d")-3, date("Y")));
  3. $d = cmsCore::dateFormat($three_day_later);
  4. $dif = $d-$val['fpubdate']; // Здесь ваша разница
  5. }
Отправляете $dif вшаблон
Код PHP:
  1. assign('dif', $dif)->
И в шаблоне сравниваете.
Код PHP:
  1. {foreach key=tid item=post from=$posts}
  2. {if $dif > 3} // если дата публикации БОЛЬШЕ (сегодняшняя дата МИНУС 3 дня)
  3. ...
  4. {/if}
Редактировалось: 1 раз (Последний: 19 октября 2016 в 19:04)
Посетитель
no avatar
Сообщений: 15
/modules/mod_blogs/module.php
Код PHP:
  1. $posts = $inBlog->getPosts(false, $model);
  2. if(!$posts){ return false; }
  3.  
  4. foreach ($posts as $val){
  5. $data = $val['fpubdate'];
  6. $three_day_later = date("Y-m-d ",mktime(0, 0, 0, date("m") , date("d")-3, date("Y")));
  7. $d = cmsCore::dateFormat($three_day_later);
  8. $dif = $d-$data;
  9. }
  10. cmsPage::initTemplate('modules', 'mod_blogs')->
  11. assign('posts', $posts)->
  12. assign('cfg', $cfg)->
  13. assign('dif', $dif)->
  14. display('mod_blogs.tpl');
mod_blogs.tpl
Код PHP:
  1. {foreach key=tid item=post from=$posts}
  2. {php}echo $dif;{/php} //ничего не выводит
  3.  
  4. {if $dif < 3}
Цель: выделить "свежую" запись в Блогах mymiit.ru

$dif не правильно высчитывается или не передается вообще.
Редактировалось: 1 раз (Последний: 20 октября 2016 в 13:15)
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
{foreach key=tid item=post from=$posts} {php}echo $dif;{/php} //ничего не выводит {if $dif < 3}
{foreach key=tid item=post from=$posts}
{$dif}
{if $dif < 3}
........
{/if}
{/foreach}
$dif не правильно высчитывается или не передается вообще.
Всё правильно вычисляется.Что то не так делаете.
Покажите
Код PHP:
  1. print_r($post['fpubdate']);
Редактировалось: 2 раз (Последний: 20 октября 2016 в 14:10)
Посетитель
no avatar
Сообщений: 15
Код PHP:
  1. {foreach key=tid item=post from=$posts}
  2. {php}print_r($post['fpubdate']);{/php} //тут ничего не выводит
  3. {$dif} //тут ВСЕГДА 8
  4.  
  5. {if $dif < 3}
  6. <div class="mod_latest_entry ramaf">
  7. <div class="mod_latest_image">
  8. <a href="{profile_url login=$post.login}" title="{$post.author|escape:'html'}"><img border="0" class="usr_img_small" src="{$post.author_avatar}" /></a>
  9. </div>
  10.  
  11. <a class="mod_latest_blog_title" href="{$post.url}" title="{$post.title|escape:'html'}">{$post.title|truncate:70}</a>
  12.  
  13. <div class="mod_latest_date">
  14. {$post.fpubdate} - <a href="{$post.blog_url}">{$post.blog_title}</a> - <a href="{$post.url}#c" title="{$post.comments_count|spellcount:$LANG.COMMENT1:$LANG.COMMENT2:$LANG.COMMENT10}" class="mod_latest_comments">{$post.comments_count}</a> - <span class="mod_latest_rating">{$post.rating|rating}</span>
  15. </div>
  16.  
  17. </div>
  18. {else}
  19. <div class="mod_latest_entry rama">
  20.  
  21. <div class="mod_latest_image">
  22. <a href="{profile_url login=$post.login}" title="{$post.author|escape:'html'}"><img border="0" class="usr_img_small" src="{$post.author_avatar}" /></a>
  23. </div>
  24.  
  25. <a class="mod_latest_blog_title" href="{$post.url}" title="{$post.title|escape:'html'}">{$post.title|truncate:70}</a>
  26.  
  27. <div class="mod_latest_date">
  28. {$post.fpubdate} - <a href="{$post.blog_url}">{$post.blog_title}</a> - <a href="{$post.url}#c" title="{$post.comments_count|spellcount:$LANG.COMMENT1:$LANG.COMMENT2:$LANG.COMMENT10}" class="mod_latest_comments">{$post.comments_count}</a> - <span class="mod_latest_rating">{$post.rating|rating}</span>
  29. </div>
  30.  
  31. </div>
  32. {/if}
  33. {/foreach}
Сравнить дату сознания поста в блоге с текущей
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
mymiit,
Код PHP:
  1. print_r($post['fpubdate']);
Это ф-ция php и выводить её нужно в module.php.Прежде чем браться править код, хоть немного почитайте.
В module.php в конце цикла foreach пропишите
Код PHP:
  1.  
  2. echo $three_day_later.'<br>'
  3. echo $d.'<br>';
  4. echo $val['fpubdate'].'<br>';
  5. echo ($d-$val['fpubdate']);
и покажите результат.
Посетитель
no avatar
Сообщений: 15
Код PHP:
  1. $posts = $inBlog->getPosts(false, $model);
  2. if(!$posts){ return false; }
  3.  
  4. foreach ($posts as $val){
  5. $three_day_later = date("Y-m-d ",mktime(0, 0, 0, date("m") , date("d")-3, date("Y")));
  6. $d = cmsCore::dateFormat($three_day_later);
  7. $dif = $d-$val['fpubdate'];
  8.  
  9. echo $three_day_later.'<br>';
  10. echo $d.'<br>';
  11. echo $val['fpubdate'].'<br>';
  12. echo ($d-$val['fpubdate']).'<br>';
  13. }
  14. cmsPage::initTemplate('modules', 'mod_blogs')->
  15. assign('posts', $posts)->
  16. assign('cfg', $cfg)->
  17. assign('dif', $dif)->
2016-10-17
17 октября 2016
сегодня в 15:40
17
2016-10-17
17 октября 2016
14 октября 2016
3
2016-10-17
17 октября 2016
11 октября 2016
6
2016-10-17
17 октября 2016
7 октября 2016
10
2016-10-17
17 октября 2016
1 сентября 2016
16
2016-10-17
17 октября 2016
10 июня 2016
7

Код PHP:
  1. {foreach key=tid item=post from=$posts}
  2. {if $dif < 4}
Разницу в днях считает неверно, если пост от текущего дня или в прошлом месяце - тоже.
Но пост от 14 октября 2016 возвращает разницу 3, что соответствует условию, но выводит всё равно с CSS-оформлением от else
Редактировалось: 1 раз (Последний: 20 октября 2016 в 16:01)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2610
mymiit,

Если Вам не дороги русские названия месяцев, можете закомментировать в \core\cms.php вот так:

Код PHP:
  1. // Замена числового обозначения месяца на словесное (склоненное в падеже)
  2. /* if ($is_full_m){
  3.   $m = $_LANG['MONTH_'.$m];
  4.   }else{
  5.   $m = $_LANG['MONTH_'.$m.'_SHORT'];
  6.   } */
А в \templates\ваш_шаблон\modules\mod_blogs.tpl написать так:

Код PHP:
  1. {if {$post.fpubdate}>{($smarty.now-345600)|date_format:"%d %m %Y "}}
  2. <div class="mod_latest_entry new">
  3. ...
  4. {else}
  5. <div class="mod_latest_entry old">
  6. ...
  7.  
  8. {/if}
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Файл module.php
Код PHP:
  1. foreach($posts as $val){$data = $val['pubdate'];
  2. $a=floor((time() - strtotime($data))/60/60/24);
  3. echo $a; //Здесь ваша разница в днях. Дальше делайте с ней, что хотите.
  4. }
Редактировалось: 1 раз (Последний: 20 октября 2016 в 17:28)
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: