Вопрос по mysql forech

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 28 июня 2012 в 17:54
В компоненте "Комментарии" появилась необходимость вывести новое поле.
Чёт подзапутался.
Забираем из базы (в ней новое текстовое поле, в которое успешно записываются данные, site_link varchar 200)
model.php
  1.  
  2. public function getCommentsAll($page=1, $perpage=10){
  3. global $_LANG;
  4. $comments = array();
  5. $inUser = cmsUser::getInstance();
  6. $hidden_sql = $inUser->is_admin ? '' : 'AND c.is_hidden=0';
  7.  
  8. $sql = "SELECT c.id, c.guestname, c.site_link, c.content, c.pubdate as fpubdate, c.target_title, c.target_link, c.ip, c.user_id,
  9. IFNULL(v.total_rating, 0) as votes,
  10. IFNULL(u.nickname, 0) as nickname,
  11. IFNULL(u.login, 0) as login,
  12. IFNULL(u.is_deleted, 0) as is_deleted,
  13. IFNULL(p.imageurl, 0) as imageurl,
  14. IFNULL(p.gender, 0) as gender
  15. FROM cms_comments c
  16. LEFT JOIN cms_ratings_total v ON v.item_id = c.id AND v.target = 'comment'
  17. LEFT JOIN cms_users u ON u.id = c.user_id
  18. LEFT JOIN cms_user_profiles p ON p.user_id = u.id
  19. WHERE c.published=1 {$hidden_sql}
  20. ORDER BY c.id DESC
  21. LIMIT ".(($page-1)*$perpage).", $perpage";
  22.  
  23. $result = $this->inDB->query($sql);
  24.  
  25. if (!$this->inDB->num_rows($result)) { return false; }
  26.  
  27. while($comment = $this->inDB->fetch_assoc($result)){
  28. $comment['fpubdate'] = cmsCore::dateFormat($comment['fpubdate'], true, true);
  29. switch ($comment['gender']){
  30. case 'm': $comment['gender'] = $_LANG['COMMENTS_MALE'];
  31. break;
  32. case 'f': $comment['gender'] = $_LANG['COMMENTS_FEMALE'];
  33. break;
  34. default: $comment['gender'] = $_LANG['COMMENTS_GENDER'];
  35. }
  36. $comments[] = $comment;
  37. }
  38.  
  39. $comments = cmsCore::callEvent('GET_COMMENTS', $comments);
  40.  
  41. return $comments;
  42.  
  43. }
  44.  
  45.  
frontend.php
  1.  
  2. // Если есть комментарии, выбираем и обрабатываем
  3. if ($total){
  4.  
  5. $comments_list = $model->getCommentsAll($page, $perpage);
  6.  
  7. foreach($comments_list as $comment){
  8. $next = sizeof($comments);
  9. $comments[$next] = $comment;
  10.  
  11. if
  12. ($comments[$next]['guestname']) {
  13.  
  14. $comments[$next]['author'] = $comments[$next]['guestname'];
  15.  
  16. $comments[$next]['is_profile'] =false;
  17. $comments[$next]['ip'] = (($cfg['cmm_ip'] == 1 || $cfg['cmm_ip'] == 2) && $comments[$next]['ip']) ? '('.$comments[$next]['ip'].')' : false;
  18. } else {
  19. $comments[$next]['author']['nickname'] = $comments[$next]['nickname'];
  20.  
  21. $comments[$next]['author']['login'] = $comments[$next]['login'];
  22. $comments[$next]['is_profile'] = true;
  23. $comments[$next]['user_image'] = usrImageNOdb($comments[$next]['user_id'], 'small', $comments[$next]['imageurl'], $comments[$next]['is_deleted']);
  24. $comments[$next]['ip'] = ($cfg['cmm_ip'] == 2 && $comments[$next]['ip']) ? '('.$comments[$next]['ip'].')' : false;
  25. }
  26. $comments[$next]['show'] = ((!$cfg['min_karma'] || $comments[$next]['votes']>=$cfg['min_karma_show']) || $inCore->userIsAdmin($comments[$next]['user_id']));
  27. if ($comments[$next]['votes']>0){
  28. $comments[$next]['votes'] = '<span class="cmm_good">+'.$comments[$next]['votes'].'</span>';
  29. } elseif ($comments[$next]['votes']<0){
  30. $comments[$next]['votes'] = '<span class="cmm_bad">'.$comments[$next]['votes'].'</span>';
  31. }
  32. }
  33. }
  34.  
  35.  
  36.  
  37. $inPage->addHead('<link rel="alternate" type="application/rss+xml" title="'.$_LANG['BOARD'].'" href="'.HOST.'/rss/comments/all/feed.rss">');
  38.  
  39. // Отдаем в шаблон
  40. $smarty = $inCore->initSmarty('components', 'com_comments_list_all.tpl');
  41. $smarty->assign('site_link', $site_link);
  42.  
  43.  
Вопрос: как забрать данные по новому полю 'site_link' и передать переменной (на пример $site_link).
Заранее спасиб)
#2 1 июля 2012 в 08:48
↑ up ↑.Не могу без наглядного примера разобраться.Учу кодинг по инстанту.В модуль Последние комментарии вывел, а в самом компоненте невыходит.
#3 1 июля 2012 в 16:11
вот эта строка не имеет смысла
  1.  
  2. $smarty->assign('site_link', $site_link);
  3.  
у вас же поле site_link выбирается точно так же как и все остальные
вы получаете массив $comments_list, в котором каждый элемент это тоже массив (1 комментарий) и у него есть поле site_link
короче говоря, выводить в шаблоне это поле надо так же как и любое другое поле комментария, например текст или автор
#4 1 июля 2012 в 19:01
c.site_link, в model.php забирает из базы ваше новое поле site_link
вместе со всем остальным добром оно передаётся в com_comments_list_all.tpl
чтоб там его вывести на экран, по аналогии с другими полями, пишем {$comment.site_link}

//как совершенно верно сказал r2, нужно понимать, что это не одно значение для всех
комментариев сразу, а у каждого коммента своё значение site_link
#5 2 июля 2012 в 00:20
Спасибо ребята, на самом деле очень помогли.Всё работает!!!
Я выводил в шаблоне {$site_link}, а надо было {$comment.site_link}.
Тему закрываю.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.