Все публикации и комменты автора на странице профиля. Как?

Прислано: smile

пт, 13/10/2006 - 07:35

Всем привет!

Увидел на Вебпланете (http://webplanet.ru), которая относительно недавно переехала на Друпал, интересную фишку:

http://webplanet.ru/user/l_e_x_a

В про филе отображаются последние ноды юзера и его последние комментарии. Может кто-то подскажем, каким(и) модулем можно такое сделать?

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано antazy в пн, 16/10/2006 - 17:02.

mysite
----
DrupalDocs.ru


Опубликовано korj в пт, 22/12/2006 - 19:27.

а как заюзать этот модуль чтобы получилось как на вебпланете (последние посты в профиле)? ведь mysite (по умолчанию) просто позволяет создавать юзерам отдельные странички (не связанные с профилем), на которых по выбору пользователей будут собиратся выбранные фиды.

как я понял, один из вариантов чтобы повторить как на вебпланете - это делать новый шаблон и вручную прописывать снипеты для каждого из полей профиля.

есть еще варианты?


Опубликовано romantaran в пт, 22/12/2006 - 22:35.

В про филе отображаются последние ноды юзера и его последние комментарии. Может кто-то подскажем, каким(и) модулем можно такое сделать?

Они и так отображаются в профиле на вкладке "отследить".


Опубликовано rapitosov@drupal.org в пн, 25/12/2006 - 00:00.

Что бы сделать "так же", надо кое-где кое-чего дописать. Работа не сложная, но готовых решений мне видеть не приводилось.

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы


Опубликовано Shedko в пн, 25/12/2006 - 01:32.

вот здесь http://drupal.org/node/63965 код для вывода всех статей пользователя, можно поменять на вывод только нод или тем форума и сделать то что Вам надо.

А здесь вывод последних записей в блоге, думаю с этого легче будет начать
http://drupal.org/node/26478

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


Опубликовано korj в вт, 26/12/2006 - 22:19.

Shedko - спасибо, попробую! не догодался снипеты в блоки вставлять! (хотя с блоками нагрузка наверное побольше будет?!?)

rapitosov@drupal.org - дык, понятно что нужно что-то дописать, только вот что и куда?


Опубликовано Shedko в ср, 27/12/2006 - 01:24.

не догодался снипеты в блоки вставлять! (хотя с блоками нагрузка наверное побольше будет?!?)

>> можно и не блоки, можно profile.tpl настроить


Опубликовано korj в ср, 27/12/2006 - 20:48.

а все-таки, подскажите снипет для вывода списка комментариев конкретного юзера ?!?


Опубликовано Shedko в чт, 28/12/2006 - 01:46.

Для вывода последних комментариев пользователя на странице профиля в блоке вставляем код:

Если надо поменять количество выводимых комментариев, то меняем LIMIT 10"; на любое нужное значение, если надо выводить 5 последних комментариев, то меняем на LIMIT 5"

<?php
$userid 
arg(1);
$node_type 'page,forum';
$sql "SELECT c.cid, c.nid, c.subject FROM {comments} c JOIN {node} n USING(nid) WHERE c.uid = $userid ORDER BY c.timestamp DESC LIMIT 10";
$results db_query($sql$user->uid$node_type);

$list = array();
while ( 
$data db_fetch_object($results) ) {
if ( 
trim($data->subject) ) {
   
$list[] = l($data->subject"node/$data->nid"NULLNULL"comment-$data->cid");
}
}
if ( 
count($list) > ) {
print 
theme('item_list'$list);
}
?>

А этот сниппет просто выведет все 50 последнх записей пользователя, включая любой материал (выводит без разбора, т.е. все ссылки по порядку, в не зависимости от типа записи (нода, коментарий, тема форума, блог и т.д.)

<?php
  $nlimit 
50;
  
$userid arg(1);
  if (
is_numeric($userid)) {
    
$result db_query("SELECT n.created, n.title, n.nid, n.changed,
n.status, n.type
    FROM node n
    WHERE n.uid = 
$userid AND n.status = 1
    ORDER BY n.changed
    DESC LIMIT 
$nlimit");
    while (
$obj db_fetch_object($result)) {
      
$co++;
      
$output .= l(($obj->title), "node/".$obj->nid);
      
$output .= '<BR>';
    }
   
$output .= print_file_profiles(NULL) ;
    return 
$output;
  }
?>

Проверено на версии 4.7.4, на других не знаю :-)

==============================
И так, после того как создали блок, для того чтобы он отображался только на страницах профилей делаем следующее

В настройках модуля отмечаем:
"Показывать только на перечисленных страницах"
и в поле для ввода текста, что под этим выбором вводим текст:
user/*


Опубликовано korj в пт, 05/01/2007 - 07:55.

Shedko - спасибо, работает!


Опубликовано korj в пн, 29/01/2007 - 19:30.

В настройках модуля отмечаем:
"Показывать только на перечисленных страницах"
и в поле для ввода текста, что под этим выбором вводим текст:
user/*

кстати, если так делать, то на страницах типа /user/register будут выскакивать warnings
как можно этого избежать?


Опубликовано Shedko в пн, 29/01/2007 - 21:11.

Попробуйте в настройках блока, заставить выполняться код

function is_user_page() {
if (arg(0) == 'user') {
if (arg(1) != 'register') {
if (arg(1) != 'edit') {
if (arg(1) != 'login') {
return TRUE;
}
}
}
}
return FALSE;
}

Т.е. здесь запрет показа этого блока на страницах редактирования, регистрации.


Опубликовано korj в пн, 29/01/2007 - 23:02.

к сожалению не работает (друпал 4.7). откуда беруться нужные arg ?


Опубликовано Shedko в вт, 30/01/2007 - 02:56.

Ладно, давайте так как написано на страничке http://drupal.org/node/35728

Создаем файл TEMPLATE.PHP (если он конечно еще не существует)

вставляем в него такой код:

<?php
function phptemplate_user_profile($user$fields = array()) {
  return 
_phptemplate_callback('user_profile', array('user' => $user'fields' => $fields));
}
?>

Затем создаем новый файл user_profile.tpl.php и в него "вбиваем" код который обозначен выше для вывода коментариев.

Например просто набив

<?php
  $uid 
arg(1);
  
$nlimit 5;
  
$result db_query("SELECT n.created, n.title, n.nid, n.changed
  FROM node n
  WHERE n.uid = 
$uid
  AND n.status = 1
  ORDER BY n.changed
  DESC LIMIT 
$nlimit");
  
$output3 .= "<div class=\"item-list\"><ul>\n";
  
$output3 .= node_title_list($result);
  
$output3 .= "</ul></div>";
  print 
$output3;
 
?>

в этот файл, вы получите на этой страничке еще и все сообщения от этого пользователя

=========================
Если же надо поменять вывод и в списке пользователей сайта, то Вам сюда
http://drupal.org/node/46156


Опубликовано ultraboy@drupal.org в вт, 30/01/2007 - 08:49.

У меня в 4.7 работает так:

"Show block on specific pages:" -> "Show if the following PHP code returns TRUE (PHP-mode, experts only)." -> и туда следующий код:

<?php
return (arg(0) == 'user' && is_numeric(arg(1))) ? TRUE FALSE;
?>

(как сделать нормальное отображение амперсандов, чтобы в хтмл-сущности не конвертились? на друпалорг нет такой проблемы)


Опубликовано korj в вт, 30/01/2007 - 12:29.

работает, но вот бы еще отсечь странички типа /user/1/edit ?!?
я добавил в условие  && arg(2) != 'edit' ?


Опубликовано Shedko в ср, 31/01/2007 - 00:39.

(как сделать нормальное отображение амперсандов, чтобы в хтмл-сущности не конвертились? на друпалорг нет такой проблемы)

Просто выбрать другой формат ввода, правда будет без подсветки кода.


Опубликовано korj в пт, 02/02/2007 - 13:01.

копаем дальше - на странице пользователя есть ссылка - все публикации пользователя - http://webplanet.ru/all/9 - там лента нод (любых типов?) с авторством юзера #9
как такое можно реализовать? если тупым запросом к базе - то не будет шаблонов cck и тд


Опубликовано korj в пт, 02/02/2007 - 21:02.

ноды с помощью views получилось отобразить, а коменты пока не получается (совершенно левые коменты почему-то идут в выдаче)


Опубликовано ultraboy@drupal.org в чт, 29/03/2007 - 08:01.

Написал модуль на эту тему http://drupal.org/project/usercontent . Обсуждение и предложения здесь http://www.drupal.ru/node/4694


Опубликовано romantaran в чт, 29/03/2007 - 11:13.

я как раз хотел скачать этот модуль.
что ж только для четвертой версии?


Опубликовано SlavviR в чт, 14/06/2007 - 15:56.

подскажите что здесь изменить, чтоб вывод был только из одного типа материалов?
или другой код нужен? подскажите

<?php
  
//display all content a user has created -------

  
$nlimit 50//max nodes to show, edit this value


  //start ----------------------------------------
  
$userid arg(1);
  
  if (
is_numeric($userid)) {

    
$result db_query("SELECT n.created, n.title, n.nid, n.changed,
n.status, n.type
    FROM node n
    WHERE n.uid = 
$userid AND n.status = 1
    ORDER BY n.changed
    DESC LIMIT 
$nlimit");

    while (
$obj db_fetch_object($result)) {
      
$co++;

      
$output .= l(($obj->title), "node/".$obj->nid);
      
$output .= '<BR>';
    }
    return 
$output;
  }
?>


Опубликовано Valeratal в пн, 15/10/2007 - 08:15.

спасибо