Имя
Сергей
Выводит список документов пользователя в виде таблицы. За основу был взят сниппет Список документов в профиле пользователя — 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 .= ' '.'<a title="'.t('promoted').'"><img src="/misc/promoted.png" alt="'.t('promoted').'" /></a>';
}
if ($node->sticky) {
$status .= ' '.'<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 .= ' '.'<a title="'.t('promoted').'"><img src="/misc/promoted.png" alt="'.t('promoted').'" /></a>';
}
if ($node->sticky) {
$status .= ' '.'<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();
}
?>| Attachment | Size |
|---|---|
| icons.7z | 2.43 KB |
Comments
Подскажите пожалуйста, как добавить дату публикации документа и показывать в таблице только документы определенных типов.
В основной SQL (
$sql) запрос в секциюSELECTдобавитьn.created(если нужна дата публикации) илиn.changed(если нужна дата последнего изменения). В переменную$headerв нужную вам позицию добавить название столбца (напримерt('Date'),) и в соответствующую позицию в переменной $row добавитьformat_date($node->created, 'small')илиformat_date($node->changed, 'small'), в зависимости от того, какая дата вам нужнаДля исключения например типа
pageиblogиз выдачи в оба SQL запроса в секцииWHEREдобавте такой код:n.type NOT IN ('page', 'blog')Большое спасибо!
Post new comment