Снипет "Ответы мне"

23 мая 2008 в 8:29

Написал вот такую штуку. Выводит список всех новых (непрочтенных) комментариев на материалы текущего юзера, а также новых комментариев-ответов на комментарии юзера.

<h2>Новые комментарии к моим материалам</h2>
<?
global $user;
$any = FALSE;
$r = db_query("SELECT * FROM {node} WHERE uid=%s ORDER BY `created` DESC",$user->uid);
while ($node=db_fetch_object($r)) {
  $new = comment_num_new($node->nid);
  if (!$new) continue;
  print("<h2 class='title'>Re: {$node->title}</h2>\n");
  $cr = db_query("SELECT * FROM {comments} WHERE nid=%d ORDER BY timestamp",$node->nid);
  while ($comment = db_fetch_object($cr)) {
    if (node_mark($comment->nid,$comment->timestamp) != MARK_READ) {
      print(theme('comment',$comment));
      $any = TRUE;
    }
  }
}

if (!$any) {
?>
<p>Новых комментариев нет.</p>
<?}?>

<h2>Новые ответы на мои комментарии</h2>
<?
function c_replies($cid) {
  $comments = array();
  $c = db_query("SELECT * FROM {comments} WHERE pid=%d",$cid);
  while ($comment = db_fetch_object($c)) {
    if (node_mark($comment->nid,$comment->timestamp) != MARK_READ) {
      $comments[] = $comment;
      if (comment_num_replies($comment->cid) > 0) {
        array_push($comments,c_replies($comment->cid));
      }
    }
  }
  return $comments;
}

$any = FALSE;
$r = db_query("SELECT * FROM {comments} WHERE uid=%d",$user->uid);
while ($my=db_fetch_object($r)) {
  $comments = c_replies($my->cid);
  if (count($comments) > 0) {
    print("<h2 class='title'>Re: {$my->subject}</h2>\n");
    foreach ($comments as $comment) {
      if ($comment->timestamp) {
        print(theme('comment',$comment));
        $any = TRUE;
      }
    }
  }
}

if (!$any) {
?>
<p>Новых ответов нет.</p>
<?}?>

Если убрать проверку на !=MARK_READ, а добавить ограничение по количеству выводимых записей - получатся просто последние N ответов текущему юзеру.

Комментарии

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

26 мая 2008 в 17:36