Правка модуля "Популярное в блогах", топ записей за 10 дней

+19
3.2K
Правим данный модуль для вывода топ постов за последних 10 дней, а не за весь период.

Правим только файлик /modules/mod_bestblogs/module.php

Вставляем вместо всего кода етот:
  1. <?php
  2. function mod_bestblogs($module_id){
  3. $inCore = cmsCore::getInstance();
  4. $inDB = cmsDatabase::getInstance();
  5. global $_LANG;
  6. if (!function_exists('cmsKarmaFormat')){ //if not included earlier
  7. include($_SERVER['DOCUMENT_ROOT'].'/core/lib_karma.php');
  8. }
  9.  
  10. $cfg = $inCore->loadModuleConfig($module_id);
  11.  
  12. if (!isset($cfg['namemode'])) { $cfg['namemode'] = 'blog';}
  13. if (!isset($cfg['shownum'])) { $cfg['shownum'] = 10; }
  14. if (!isset($cfg['menuid'])) { $cfg['menuid'] = 0; }
  15.  
  16. if (!isset($cfg['shownum'])){
  17. echo '<p>'.$_LANG['BESTBLOGS_CONFIG_TEXT'].'</p>';
  18. return;
  19. }
  20.  
  21. $inCore->loadModel('blogs');
  22. $model = new cms_model_blogs();
  23.  
  24. $sql = "
  25. SELECT *
  26. FROM cms_ratings
  27. WHERE target = 'blogpost'
  28. AND pubdate >= CURRENT_DATE - INTERVAL 10 DAY
  29. GROUP BY item_id
  30. ";
  31. $result = $inDB->query($sql);
  32. $posts = array();
  33. $qqq = '';
  34. while($con = $inDB->fetch_assoc($result)){
  35. $qqq.= $con['item_id'].",";
  36. }
  37. $qqq.="0";
  38. $sql = "
  39. SELECT * , SUM(points) as sumpoint
  40. FROM cms_ratings
  41. WHERE target = 'blogpost'
  42. AND pubdate >= CURRENT_DATE - INTERVAL 10 DAY
  43. AND item_id IN (".$qqq.") GROUP by item_id ORDER BY sumpoint desc
  44. ";
  45. $res = $inDB->query($sql);
  46. $nums_b = 1;
  47. // $cfg['shownum'] = 1;
  48. while ($item = $inDB->fetch_assoc($res))
  49. {
  50. if ($nums_b<=$cfg['shownum']) {
  51. $nums_b++;
  52. $sql = "SELECT p.id,
  53. p.title,
  54. p.seolink,
  55. p.pubdate,
  56. b.title as blog,
  57. b.id as blog_id,
  58. b.seolink as bloglink,
  59. b.owner as owner,
  60. b.user_id as uid,
  61. b.owner as owner,
  62. b.ownertype as ownertype,
  63. u.nickname as author
  64. FROM cms_blog_posts p
  65. LEFT JOIN cms_blogs b ON b.id = p.blog_id
  66. LEFT JOIN cms_users u ON u.id=b.user_id
  67. WHERE p.published = 1 AND b.allow_who = 'all' AND p.id = '{$item['item_id']}'";
  68.  
  69. $ress = $inDB->query($sql);
  70. $con = $inDB->fetch_assoc($ress);
  71. //
  72. $next = sizeof($posts);
  73.  
  74. if ($con['owner']=='club'){
  75. $con['blog'] = dbGetField('cms_clubs', 'id='.$con['uid'], 'title');
  76. }
  77.  
  78. $text = strip_tags($con['title']);
  79. if (strlen($text)>70) { $text = substr($text, 0, 70). '...'; }
  80.  
  81. $posts[$next]['title'] = $text;
  82. $posts[$next]['href'] = $model->getPostURL(null, $con['bloglink'], $con['seolink']);
  83.  
  84. if ($con['owner']=='user' && $con['ownertype']=='single' && $cfg['namemode']=='user'){
  85. $con['blog'] = $con['author'];
  86. }
  87.  
  88. $posts[$next]['blog'] = $con['blog'];
  89. $posts[$next]['bloghref'] = $model->getBlogURL(null, $con['bloglink']);
  90.  
  91. // $posts[$next]['karma'] = cmsKarmaFormat($con['points']);
  92. $posts[$next]['karma'] = $item['sumpoint'];
  93.  
  94. $posts[$next]['date'] = $inCore->dateFormat($con['pubdate']);
  95. }
  96. }
  97.  
  98. $smarty = $inCore->initSmarty('modules', 'mod_bestblogs.tpl');
  99. $smarty->assign('posts', $posts);
  100. $smarty->display('mod_bestblogs.tpl');
  101.  
  102. return true;
  103. }
  104. ?>
Вот и все, если будут замечания пишите.

Материал также опубликован на сайте
+1
kaless kaless 13 лет назад #
Спасибо, поставлю себе как только вырастит активность в блогах
0
Daze77 Daze77 13 лет назад #
А если нужно поставить отдельным модулем? Как это все решить?!
+1
Yurik Yurik 13 лет назад #
Как будет свободное время, сделаю отдельным модулем
0
Daze77 Daze77 13 лет назад #
И как сделать за неделю, а не за 10 дней?
0
Atid Atid 13 лет назад #
AND pubdate >= CURRENT_DATE - INTERVAL 10 DAY вероятнее всего на 7 поменять
0
Daze77 Daze77 13 лет назад #
Вероятнее или точно? Простите, я не программист :)
0
Денис Васильевич Денис Васильевич 13 лет назад #
а сколько в неделе дней столько и пишите :)
0
Daze77 Daze77 13 лет назад #
Установил модуль! Но у меня показывает статьи за март и за август! Хотя должно за 7 дней! Мне кажется нужно вносить правки!
0
Katerina Katerina 13 лет назад #
Спасибо большое, Yurik. Все работает замечательно.
0
Katerina Katerina 13 лет назад #
Меняю в двух местах 10 на 2 дня. Что-то не получается. Как выводил 10, так и осталось.
Там точно в двух местах менять или я что-то пропустила?
0
Katerina Katerina 13 лет назад #
Этот модуль "Популярные записи за 10 дней" показывает правильно, но не новые материалы, а вообще все, за которые за эти 10 дней голосовали больше всего. Поэтому могут выводит и старые записи, если в последние 10 дней за них все кинулись голосовать.
0
Coolmax Coolmax 12 лет назад #
А не подскажете как сделать, чтоб выборка и сортировка была по количеству комментариев?
0
sibroy sibroy 8 лет назад #
Как бы такое сделать на 1,10,3...

Еще от автора

Компонент "Голосования" для второй ветки.
Простой компонент для организации голосований на сайте. В комплекте: сам компонент и виджет для вывода.
Простой 3-колоночный шаблон для 2 ветки
Простой шаблон для 2 ветки.
Новый тип поля "Место на карте" для 2 ветки
Добавляем новый тип поля для контента во второй ветке
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.