Решено. Вывод комментариев в user-profile.tpl.php

Главные вкладки

Аватар пользователя wargan wargan 18 марта 2010 в 7:40

Помогите разобраться с выводом комментариев в user-profile.tpl.php.
В template.php прописал функцию:

<?php function названиетемы_mycomments($uid,$howmany) {
  $returnstr = "<span class='field-label'>Kommentarii:</span><br><ul>";
  $i = 0;
  $result = db_query('SELECT n.nid, n.title, c.cid, c.subject FROM node n INNER JOIN comments c ON n.nid = c.nid WHERE c.uid = %d AND c.status = 0 ORDER BY c.timestamp DESC LIMIT 0,%d', $uid, $howmany);
  while ($r = db_fetch_object($result)) {
    $i++;
    $returnstr .= '<li>' . $i . ". <a href='/node/" . $r->nid . "#comment-" . $r->cid . "'>" . $r->subject . '</a>... <small><i>(on ' . $r->title . ')</i></small></li>';
  }
  $returnstr .= '</ul>';
  return $returnstr;
}
?>

в user-profile.tpl.php вывожу как:

<?php
$commentblock = названиетемы__mycomments($account->uid,10);
echo $commentblock;
//    More link
if($headeroutput != '' && $commentblock != ''){
    $track_link = "<br><a href='/user/" . $account->uid . "/track" . "'>" . t('Read more nodes and comments') . '</a>';
  print $track_link;
}
?>

Но выводится только:
Kommentarii:

Read more nodes and comments (-ссылка на трекер)

где ошибка?

Комментарии

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 18 марта 2010 в 12:07

С помощью views делаете нужную выборку и вставляете в user-profile.tpl.php используя
<?phpfunction views_embed_view($name, $display_id = 'default')?>

и никаких снипетов не нужно

Аватар пользователя gorr gorr 18 марта 2010 в 14:38

Вместо строчки:

  $result = db_query('SELECT n.nid, n.title, c.cid, c.subject FROM node n INNER JOIN comments c ON n.nid = c.nid WHERE c.uid = %d AND c.status = 0 ORDER BY c.timestamp DESC LIMIT 0,%d', $uid, $howmany);

Пишем:

  $result = db_query('SELECT n.nid, n.title, c.cid, c.subject FROM node n INNER JOIN comments c ON n.nid = c.nid WHERE c.uid = %d AND c.status = 0 ORDER BY c.timestamp DESC LIMIT %d', $uid, $howmany);
Аватар пользователя wargan wargan 18 марта 2010 в 19:16

выдача комментов получилась по такому запросу:
$result = db_query('SELECT c.cid, c.nid, c.name, c.subject FROM {comments} c WHERE c.uid = %d AND c.status = 0 ORDER BY c.timestamp DESC LIMIT 0,%d', $uid, $howmany);
однако нода почему-то не выдается, по запросу: n.nid, n.title, ну и вообще выдача нулевая, в чем тут проблема

gorr, пример пробовал, не вышло, т.к. n.nid, n.title отсекает запрос (?)

Аватар пользователя gorr gorr 19 марта 2010 в 0:56

Ну не верный запрос так будет, ограничивается ведь выборка нулем записей(лимит 0).
Тот, что я писал верный, правда если префиксы у таблиц ставили, то надо в фигурные скобки названия таблиц ставить вот так:

  $result = db_query('SELECT n.nid, n.title, c.cid, c.subject FROM {node} n INNER JOIN {comments} c ON n.nid = c.nid WHERE c.uid = %d AND c.status = 0 ORDER BY c.timestamp DESC LIMIT %d', $uid, $howmany);
Аватар пользователя wargan wargan 19 марта 2010 в 6:00

Всё работает как надо, спасибо gorr за помощь!
Для тех кто пойдет этой тропой, вот рабочий код.
Вставьте этот код в template.php

<?php function phptemplate_my_comments($uid,$howmany) {
  $returnstr = "<h2 class='title'>Last comments:</h2><div class='item-list'><ul>";

   $result = db_query('SELECT n.nid, n.title, c.cid, c.subject FROM {node} n INNER JOIN {comments} c ON n.nid = c.nid WHERE c.uid = %d AND c.status = 0 ORDER BY c.timestamp DESC LIMIT %d', $uid, $howmany);
  while ($r = db_fetch_object($result)) {

    $returnstr .= '<li>' . $i . "<a href='/node/" . $r->nid . "#comment-" . $r->cid . "'>" . $r->subject . '</a>... <small><i>( ' . $r->title . ')</i></small></li>';
  }
  $returnstr .= '</ul></div>';
  return $returnstr;
}
?>

Далее в свой созданнный user-profile.tpl.php вставляем в нужном месте этот код:

<?php
$commentblock = phptemplate_my_comments($account->uid,10);
echo $commentblock;
//    More link
if($headeroutput != '' && $commentblock != ''){
    $track_link = "<br><b><a href='/user/" . $account->uid . "/track" . "'>" . t('Посмотреть все записи и комментарии') . '</a></b>';
  print $track_link;
}
?>
Аватар пользователя wargan wargan 19 марта 2010 в 19:38

подзадача:
а как бы сделать с этим кодом - при пустом значении (когда нет у юзера комментов) не выводить заголовок:

$returnstr = "<h2 class='title'>Last comments:</h2><div class='item-list'><ul>";
Аватар пользователя wargan wargan 21 марта 2010 в 14:54

сделал так:

<?php function phptemplate_my_comments($uid,$howmany) {
        $returnstr = "";

        $result = db_query('SELECT n.nid, n.title, c.cid, c.subject FROM {node} n INNER JOIN {comments} c ON n.nid = c.nid WHERE c.uid = %d AND c.status = 0 ORDER BY c.timestamp DESC LIMIT %d', $uid, $howmany);
        while ($r = db_fetch_object($result)) {

                $returnstr .= '<li>' . $i . "<a href='/node/" . $r->nid . "#comment-" . $r->cid . "'>" . $r->subject . '</a>... <small><i>( ' . $r->title . ')</i></small></li>';
        }
        if ($returnstr) {
                $returnstr = "<h2 class='title'>Последние комментарии</h2><div class='item-list'><ul>" . $returnstr;
                $returnstr .= '</ul></div>';
        }
        return $returnstr;
}
?>

Аватар пользователя Беленькая Беленькая 3 ноября 2010 в 12:49

А как добавить вывод даты комментария? Делаю выборку timestamp, но она выводится в формате, в котором записана в БД. Как придать ей человеческий вид? Желательно "x дней x часов x минут назад" ?
Подскажите, пожалуйста...

Аватар пользователя wargan wargan 8 ноября 2010 в 12:31

Беленькая wrote:
Не получается что-то вывести вьюхой комменты определенного пользователя

в настройках представления, создаем аргумент Пользователь: Uid
Тип аргумента по умолчанию: ID пользователя из URL

Аватар пользователя iNFerNo iNFerNo 3 ноября 2010 в 15:05

Как это выбираете вьюху типакоменты там текущий пользователь в фильтрах прописать табы для профиля и вуаля.

Аватар пользователя iNFerNo iNFerNo 3 ноября 2010 в 15:19

с последним не соглашусь.

попробуйте вывести все коментари во вьюхе потом попробуйте только текущего пользователя. потом уже и в профиль добавите таб с сылкой на вьюху с коментами

или вам надо прям в профил ьуже готовые коменты. так тогда есть снипеты.