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

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 18 октября 2016 в 17:32
InstantCMS v1.10.4

mod_blogs.tpl
  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 в 18:38

ВОТ_ТУТ_ЧТО_НАПИСАТЬ

Что бы тут что то написать, нужно это что то сюда передать из файла frontend.php.
#3 18 октября 2016 в 19:35
date("Y:m:d", strtotime("now +3 days"))
#4 18 октября 2016 в 19:50

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

Ris
Круто. smile
И как php ф-ция будет в смарти работать? Наверное стоило дописать, что эту ф-цию нужно передать из php. Хотя Имхо.
#5 18 октября 2016 в 20:49
Lora,
Там первая ветка что ли? shock

Точно… не обратил внимания в первом посте.
#6 19 октября 2016 в 17:35


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

Ris

  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
#7 19 октября 2016 в 17:49
Попробовал strtotime, но не помогло.
  1. {php}
  2. $tdd2 = date("d:m:Y", strtotime($post.fpubdate));
  3. echo $tdd2; // выводит 01:01:1970
  4. {/php}
  1. {php}
  2. $tdd2 = date("d:m:Y", strtotime($post.pubdate));
  3. echo $tdd2; // тоже выводит 01:01:1970
  4. {/php}
#8 19 октября 2016 в 19:02
В модуле (module.php) после
  1.  
  2. $posts = $inBlog->getPosts(false, $model);
  3. if(!$posts){ return false; }
  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 вшаблон
  1. assign('dif', $dif)->
И в шаблоне сравниваете.
  1. {foreach key=tid item=post from=$posts}
  2. {if $dif > 3} // если дата публикации БОЛЬШЕ (сегодняшняя дата МИНУС 3 дня)
  3. ...
  4. {/if}
#9 20 октября 2016 в 13:13
/modules/mod_blogs/module.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
  1. {foreach key=tid item=post from=$posts}
  2. {php}echo $dif;{/php} //ничего не выводит
  3.  
  4. {if $dif < 3}
Цель: выделить "свежую" запись в Блогах mymiit.ru

$dif не правильно высчитывается или не передается вообще.
#10 20 октября 2016 в 14:05

{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 не правильно высчитывается или не передается вообще.

Всё правильно вычисляется.Что то не так делаете.
Покажите
  1. print_r($post['fpubdate']);
#11 20 октября 2016 в 14:42
  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}
Иллюстрация
#12 20 октября 2016 в 15:09
mymiit,
  1. print_r($post['fpubdate']);
Это ф-ция php и выводить её нужно в module.php.Прежде чем браться править код, хоть немного почитайте.
В module.php в конце цикла foreach пропишите
  1.  
  2. echo $three_day_later.'<br>'
  3. echo $d.'<br>';
  4. echo $val['fpubdate'].'<br>';
  5. echo ($d-$val['fpubdate']);
и покажите результат.
#13 20 октября 2016 в 16:00
  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


  1. {foreach key=tid item=post from=$posts}
  2. {if $dif < 4}
Разницу в днях считает неверно, если пост от текущего дня или в прошлом месяце — тоже.
Но пост от 14 октября 2016 возвращает разницу 3, что соответствует условию, но выводит всё равно с CSS-оформлением от else
#14 20 октября 2016 в 16:44
mymiit,

Если Вам не дороги русские названия месяцев, можете закомментировать в \core\cms.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 написать так:

  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}
#15 20 октября 2016 в 17:27
Файл module.php
  1. foreach($posts as $val){$data = $val['pubdate'];
  2. $a=floor((time() - strtotime($data))/60/60/24);
  3. echo $a; //Здесь ваша разница в днях. Дальше делайте с ней, что хотите.
  4. }
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.