Список документов пользователя

Выводит список документов пользователя в виде таблицы. За основу был взят сниппет Список документов в профиле пользователя — 2 и переделан. Выводится тип документа, заголовок, количество комментариев (количество новых), и статус ноды. Статус ноды выводится в виде иконок (положить в /misc/). Статусы такие: published|not published (показывается всегда), promoted (показывается только если выставлен), sticky (тоже, только если выставлен)

Сниппет работает для Drupal версий 5.x и 6.x без внесения исправлений!

UPD 24.01.2008: Исправил, модуль не правильно отображал количество страниц для постраничного просмотра таблицы
UPD 13.02.2008: Проверил на совместимость для Drupal 6.x

→ Для блока в профиле пользователей

<?php
    $nblimit
= variable_get('default_nodes_main', 20); // Ограничение по выдаваемому количеству нод

   
global $user;
   
$uid = arg(1);
    if (
arg(0) == 'user' && is_numeric($uid) && !arg(2)) {
       
$user_show = user_load(array ('uid' => $uid));
        if (
$user_show->uid) {
           
$sql = '
                SELECT
                    DISTINCT(n.nid),
                    n.title,
                    n.type,
                    GREATEST(n.changed, l.last_comment_timestamp) AS last_updated,
                    l.comment_count,
                    n.status,
                    n.promote,
                    n.sticky
                FROM
                    {node} n
                INNER JOIN
                    {node_comment_statistics} l
                ON
                    n.nid = l.nid
                INNER JOIN
                    {users} u
                ON
                    n.uid = u.uid
                LEFT JOIN
                    {comments} c
                ON
                    n.nid = c.nid
                    AND (
                        c.status = '
.COMMENT_PUBLISHED.'
                        OR c.status IS NULL
                    )
                WHERE
                    n.uid = '
.$uid.'
                ORDER BY
                    last_updated DESC
            '
;
           
$sql = db_rewrite_sql($sql);
           
$sql_count = '
                SELECT
                    COUNT(DISTINCT(n.nid))
                FROM
                    {node} n
                LEFT JOIN
                    {comments} c
                ON
                    n.nid = c.nid
                    AND (
                        c.status = '
.COMMENT_PUBLISHED.'
                        OR c.status IS NULL
                    )
                WHERE
                    n.uid = '
.$uid.'
            '
;
           
$sql_count = db_rewrite_sql($sql_count);
           
$result = pager_query($sql, $nblimit, 0, $sql_count);

           
$rows = array();
            while (
$node = db_fetch_object($result)) {
               
$comments = '';
                if (
$node->comment_count) {
                   
$comments = $node->comment_count;

                    if (
$new = comment_num_new($node->nid)) {
                       
$comments .= '<br />';
                       
$comments .= l(format_plural($new, '1 new', '@count new'), 'node/'.$node->nid, NULL, NULL, 'new');
                    }
                }

               
$status = '';
                if (
$node->status || $user->uid == $uid || user_access('administer nodes', $user)) {
                    if (
$node->status) {
                       
$status .= '<a title="'.t('published').'"><img src="/misc/published.png" alt="'.t('published').'" /></a>';
                    } else {
                       
$status .= '<a title="'.t('not published').'"><img src="/misc/not_published.png" alt="'.t('not published').'" /></a>';
                    }
                    if (
$node->promote) {
                       
$status .= '&nbsp;'.'<a title="'.t('promoted').'"><img src="/misc/promoted.png" alt="'.t('promoted').'" /></a>';
                    }
                    if (
$node->sticky) {
                       
$status .= '&nbsp;'.'<a title="'.t('sticky').'"><img src="/misc/sticky.png" alt="'.t('sticky').'" /></a>';
                    }
                }

               
$rows[] = array(
                   
check_plain(node_get_types('name', $node->type)), //Type
                   
l($node->title, 'node/'.$node->nid).' '.theme('mark', node_mark($node->nid, $node->changed)), //Post
                   
array('class' => 'replies', 'data' => $comments), //Replies
                   
$status //Status
               
);
            }

            if (!
$rows) {
               
$rows[] = array(array('data' => t('No posts available.'), 'colspan' => '5'));
            }

           
$header = array(
               
t('Type'),
               
t('Post'),
               
t('Replies'),
               
t('Status')
            );

           
$output = '<div>';
           
$output .= theme('table', $header, $rows);
           
$output .= theme('pager', NULL, $nblimit, 0);
           
$output .= '</div>';

            print
$output;
        }
    }
?>

→ Для страницы

<?php
    $nblimit
= 200; // Ограничение по выдаваемому количеству нод

   
global $user;
    if (
$user->uid) {
     
$sql = '
          SELECT
              DISTINCT(n.nid),
              n.title,
              n.type,
              GREATEST(n.changed, l.last_comment_timestamp) AS last_updated,
              l.comment_count,
              n.status,
              n.promote,
              n.sticky
          FROM
              {node} n
          INNER JOIN
              {node_comment_statistics} l
          ON
              n.nid = l.nid
          INNER JOIN
              {users} u
          ON
              n.uid = u.uid
          LEFT JOIN
              {comments} c
          ON
              n.nid = c.nid
              AND (
                  c.status = '
.COMMENT_PUBLISHED.'
                  OR c.status IS NULL
              )
          WHERE
              n.uid = '
.$user->uid.'
          ORDER BY
              last_updated DESC
      '
;
     
$sql = db_rewrite_sql($sql);
     
$sql_count = '
          SELECT
              COUNT(DISTINCT(n.nid))
          FROM
              {node} n
          LEFT JOIN
              {comments} c
          ON
              n.nid = c.nid
              AND (
                  c.status = '
.COMMENT_PUBLISHED.'
                  OR c.status IS NULL
              )
          WHERE
              n.uid = '
.$user->uid.'
      '
;
     
$sql_count = db_rewrite_sql($sql_count);
     
$result = pager_query($sql, $nblimit, 0, $sql_count);

     
$rows = array();
      while (
$node = db_fetch_object($result)) {
         
$comments = '';
          if (
$node->comment_count) {
             
$comments = $node->comment_count;

              if (
$new = comment_num_new($node->nid)) {
                 
$comments .= '<br />';
                 
$comments .= l(format_plural($new, '1 new', '@count new'), 'node/'.$node->nid, NULL, NULL, 'new');
              }
          }

         
$status = '';
          if (
$node->status) {
             
$status .= '<a title="'.t('published').'"><img src="/misc/published.png" alt="'.t('published').'" /></a>';
          } else {
             
$status .= '<a title="'.t('not published').'"><img src="/misc/not_published.png" alt="'.t('not published').'" /></a>';
          }
          if (
$node->promote) {
             
$status .= '&nbsp;'.'<a title="'.t('promoted').'"><img src="/misc/promoted.png" alt="'.t('promoted').'" /></a>';
          }
          if (
$node->sticky) {
             
$status .= '&nbsp;'.'<a title="'.t('sticky').'"><img src="/misc/sticky.png" alt="'.t('sticky').'" /></a>';
          }

         
$rows[] = array(
             
check_plain(node_get_types('name', $node->type)), //Type
             
l($node->title, 'node/'.$node->nid).' '.theme('mark', node_mark($node->nid, $node->changed)), //Post
             
array('class' => 'replies', 'data' => $comments), //Replies
             
$status //Status
         
);
      }

      if (!
$rows) {
         
$rows[] = array(array('data' => t('No posts available.'), 'colspan' => '5'));
      }

     
$header = array(
         
t('Type'),
         
t('Post'),
         
t('Replies'),
         
t('Status')
      );

     
$output = '<div><div>';
     
$output .= theme('table', $header, $rows);
     
$output .= '</div><div>';
     
$output .= theme('pager', NULL, $nblimit, 0);
     
$output .= '</div></div>';

      print
$output;
    }
    else {
     
drupal_not_found();
    }
?>

ФайлРазмер
icons.7z2.43 KB
Метки: