Модуль последних объявлений

#1 13 ноября 2012 в 15:44
Предыстория — instantcms.ru/forum/thread11334.html
В самом компоненте всё работает отлично.

Теперь встал вопрос, как сделать, чтобы Вип объявления не висели бы сверху в модуле вывода последних объявлений? Т.е. сортировка была бы по времени добавления, но само Вип выделение объявы осталось бы?
#2 13 ноября 2012 в 15:51
)) удовлетворённые потребности рождают новые потребности.

Наверное у нас разные версии, у меня в запросе упоминания о Випах нет.
Покажите какой у вас запрос к базе в модуле (это который в прошлой теме правили)
#3 13 ноября 2012 в 16:05
Система 1.9
Если правильно понимаю, то:
mod_latestboard.tpl
  1. {if $items}
  2. <ul class="new_board_items">
  3. {foreach key=tid item=item from=$items}
  4. <li {if $item.is_vip}class="vip"{/if}>
  5. <div class="mod_bcon_content">
  6. <a href="/board/read{$item.id}.html">{$item.title}</a>{if $cfg.showcity} <br/><span class="board_city">{$item.city}</span>{/if}
  7. </div>
  8. </li>
  9. {/foreach}
  10. </ul>
  11. {else}
  12. <p>{$LANG.LATESTBOARD_NOT_ADV}</p>
  13. {/if}
Сам modul.php
  1. <?php
  2. function mod_latestboard($module_id){
  3.  
  4. $inCore = cmsCore::getInstance();
  5. $inDB = cmsDatabase::getInstance();
  6. $cfg = $inCore->loadModuleConfig($module_id);
  7.  
  8. $inCore->loadModel('board');
  9. $model = new cms_model_board();
  10.  
  11. global $_LANG;
  12.  
  13. if (!isset($cfg['shownum'])){ $cfg['shownum'] = 5; }
  14. if (!isset($cfg['onlyvip'])){ $cfg['onlyvip'] = 0; }
  15.  
  16. if ($cfg['cat_id'] != '-1') {
  17. if (!$cfg['subs']){
  18. $model->whereCatIs($cfg['cat_id']);
  19. } else {
  20. $cat = $inDB->get_fields('cms_board_cats', "id='{$cfg['cat_id']}'", 'NSLeft, NSRight');
  21. if(!$cat) { return false; }
  22. $model->whereThisAndNestedCats($cat['NSLeft'], $cat['NSRight']);
  23. }
  24. }
  25. // только ВИП
  26. if($cfg['onlyvip'] && !$cfg['butvip']){
  27. $model->whereVip(1);
  28. }
  29. // кроме ВИП
  30. if($cfg['butvip'] && !$cfg['onlyvip']){
  31. $model->whereVip(0);
  32. }
  33. $model->orderBy('pubdate', 'DESC');
  34. $model->limitPage(1, $cfg['shownum']);
  35.  
  36. $items = $model->getAdverts(false, true, false, true);
  37.  
  38. $smarty = $inCore->initSmarty('modules', 'mod_latestboard.tpl');
  39. $smarty->assign('items', $items);
  40. $smarty->assign('cfg', $cfg);
  41. $smarty->display('mod_latestboard.tpl');
  42.  
  43. return true;
  44. }
  45. ?>
#4 13 ноября 2012 в 16:28
в
/components/board/model.php

стр. 633 — {$this->group_by}
УДАЛИТЬ
#5 13 ноября 2012 в 16:41
это 321 строка почему-то. ничего не происходит…
#7 13 ноября 2012 в 17:41
странно. скачал чистую систему — там нет такой строки… 1.9 система
#8 13 ноября 2012 в 17:45
public function getAdverts($show_all = false, $is_users = false, $is_coments = false, $is_cats = false){
строка 593 у меня
внутри этой функции строчка {$this->group_by}
#9 13 ноября 2012 в 18:47
ничего не происходит, вот кусок кода
  1. public function getAdverts($show_all = false, $is_users = false, $is_coments = false, $is_cats = false){
  2.  
  3. $this->deleteOldRecords();
  4. $this->clearOldVips();
  5.  
  6. //подготовим условия
  7. $pub_where = ($show_all ? '1=1' : 'i.published = 1');
  8. $r_join = $is_users ? " LEFT JOIN cms_users u ON u.id = i.user_id \n" : '';
  9. $r_join .= $is_cats ? " INNER JOIN cms_board_cats cat ON cat.id = i.category_id" : '';
  10.  
  11. $r_select = $is_users ? ', u.login, u.nickname' : '';
  12. $r_select .= $is_cats ? ', cat.title as cat_title, cat.obtypes' : '';
  13.  
  14. $sql = "SELECT i.*{$r_select}
  15.  
  16. FROM cms_board_items i
  17. {$r_join}
  18. WHERE {$pub_where}
  19. {$this->where}
  20.  
  21. {$this->group_by}
  22.  
  23. {$this->order_by}\n";
  24.  
  25. if ($this->limit){
  26. $sql .= "LIMIT {$this->limit}";
  27. }
  28.  
  29. $result = $this->inDB->query($sql);
  30.  
  31. if(!$this->inDB->num_rows($result)){ return false; }
  32.  
  33. $records = array();
  34.  
  35. while ($item = $this->inDB->fetch_assoc($result)){
  36.  
  37. if($is_coments){
  38. $item['comments'] = $this->inCore->getCommentsCount('boarditem', $item['id']);
  39. }
  40.  
  41. $item['content'] = $this->config['auto_link'] ? $this->inCore->parseSmiles($item['content']) : $item['content'];
  42. $item['title'] = $item['obtype'].' '.$item['title'];
  43. $item['fpubdate'] = $this->inCore->dateformat($item['pubdate']);
  44. $item['enc_city'] = urlencode($item['city']);
  45. if (!$item['file'] || !file_exists(PATH.'/images/board/small/'.$item['file'])){
  46. $item['file'] = 'nopic.jpg';
  47. }
  48. // Права доступа
  49. $item['moderator'] = $this->checkAccess($item['user_id']);
  50. $timedifference = strtotime("now") - strtotime($item['pubdate']);
  51. $item['is_overdue'] = round($timedifference / 86400) > $item['pubdays'] && $item['pubdays'] > 0;
  52.  
  53. $records[] = $item;
  54.  
  55. }
  56.  
  57. $this->resetConditions();
  58.  
  59. $records = cmsCore::callEvent('GET_BOARD_RECORDS', $records);
  60.  
  61. return $records;
  62.  
  63. }
#10 13 ноября 2012 в 19:20
group_by — группирует записи в запросе, в нашем случае на випы и обычные. Если удалить, то группировки никакой остаться не должно
#11 13 ноября 2012 в 19:48
удаляю строку — ничего не происходит, чищу кеш везде — все так же.
Дальше есть ещё
  1. public function getAdvertsCount($show_all = false){
  2.  
  3. //подготовим условия
  4. $pub_where = ($show_all ? '1=1' : 'i.published = 1');
  5.  
  6. $sql = "SELECT 1
  7.  
  8. FROM cms_board_items i
  9.  
  10. WHERE {$pub_where}
  11. {$this->where}
  12.  
  13. {$this->group_by}\n";
  14.  
  15. $result = $this->inDB->query($sql);
  16.  
  17. return $this->inDB->num_rows($result);
  18.  
  19. }
#12 13 ноября 2012 в 20:46
это просто количество считает
#13 13 ноября 2012 в 20:51
вот, не работает, что делать???
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.