Все публикации и комменты автора на странице профиля. Как?
Прислано: smile
пт, 13/10/2006 - 07:35
Всем привет!
Увидел на Вебпланете (http://webplanet.ru), которая относительно недавно переехала на Друпал, интересную фишку:
http://webplanet.ru/user/l_e_x_a
В про филе отображаются последние ноды юзера и его последние комментарии. Может кто-то подскажем, каким(и) модулем можно такое сделать?
- smile's blog
- Для комментирования войдите или зарегистрируйтесь
mysite
----
DrupalDocs.ru
- Для комментирования войдите или зарегистрируйтесь
а как заюзать этот модуль чтобы получилось как на вебпланете (последние посты в профиле)? ведь mysite (по умолчанию) просто позволяет создавать юзерам отдельные странички (не связанные с профилем), на которых по выбору пользователей будут собиратся выбранные фиды.
как я понял, один из вариантов чтобы повторить как на вебпланете - это делать новый шаблон и вручную прописывать снипеты для каждого из полей профиля.
есть еще варианты?
- Для комментирования войдите или зарегистрируйтесь
В про филе отображаются последние ноды юзера и его последние комментарии. Может кто-то подскажем, каким(и) модулем можно такое сделать?
Они и так отображаются в профиле на вкладке "отследить".
- Для комментирования войдите или зарегистрируйтесь
Что бы сделать "так же", надо кое-где кое-чего дописать. Работа не сложная, но готовых решений мне видеть не приводилось.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы
- Для комментирования войдите или зарегистрируйтесь
вот здесь http://drupal.org/node/63965 код для вывода всех статей пользователя, можно поменять на вывод только нод или тем форума и сделать то что Вам надо.
А здесь вывод последних записей в блоге, думаю с этого легче будет начать
http://drupal.org/node/26478
Т.е. используем указанный код в блоке и включаем этот блок только на страницах профиля
- Для комментирования войдите или зарегистрируйтесь
Shedko - спасибо, попробую! не догодался снипеты в блоки вставлять! (хотя с блоками нагрузка наверное побольше будет?!?)
rapitosov@drupal.org - дык, понятно что нужно что-то дописать, только вот что и куда?
- Для комментирования войдите или зарегистрируйтесь
не догодался снипеты в блоки вставлять! (хотя с блоками нагрузка наверное побольше будет?!?)
>> можно и не блоки, можно profile.tpl настроить
- Для комментирования войдите или зарегистрируйтесь
а все-таки, подскажите снипет для вывода списка комментариев конкретного юзера ?!?
- Для комментирования войдите или зарегистрируйтесь
Для вывода последних комментариев пользователя на странице профиля в блоке вставляем код:
Если надо поменять количество выводимых комментариев, то меняем 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", NULL, NULL, "comment-$data->cid");
}
}
if ( count($list) > 0 ) {
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/*
- Для комментирования войдите или зарегистрируйтесь
Shedko - спасибо, работает!
- Для комментирования войдите или зарегистрируйтесь
В настройках модуля отмечаем:
"Показывать только на перечисленных страницах"
и в поле для ввода текста, что под этим выбором вводим текст:
user/*
кстати, если так делать, то на страницах типа /user/register будут выскакивать warnings
как можно этого избежать?
- Для комментирования войдите или зарегистрируйтесь
Попробуйте в настройках блока, заставить выполняться код
function is_user_page() {
if (arg(0) == 'user') {
if (arg(1) != 'register') {
if (arg(1) != 'edit') {
if (arg(1) != 'login') {
return TRUE;
}
}
}
}
return FALSE;
}
Т.е. здесь запрет показа этого блока на страницах редактирования, регистрации.
- Для комментирования войдите или зарегистрируйтесь
к сожалению не работает (друпал 4.7). откуда беруться нужные arg ?
- Для комментирования войдите или зарегистрируйтесь
Ладно, давайте так как написано на страничке 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
- Для комментирования войдите или зарегистрируйтесь
У меня в 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;
?>(как сделать нормальное отображение амперсандов, чтобы в хтмл-сущности не конвертились? на друпалорг нет такой проблемы)
- Для комментирования войдите или зарегистрируйтесь
работает, но вот бы еще отсечь странички типа /user/1/edit ?!?
я добавил в условие && arg(2) != 'edit' ?
- Для комментирования войдите или зарегистрируйтесь
(как сделать нормальное отображение амперсандов, чтобы в хтмл-сущности не конвертились? на друпалорг нет такой проблемы)
Просто выбрать другой формат ввода, правда будет без подсветки кода.
- Для комментирования войдите или зарегистрируйтесь
копаем дальше - на странице пользователя есть ссылка - все публикации пользователя - http://webplanet.ru/all/9 - там лента нод (любых типов?) с авторством юзера #9
как такое можно реализовать? если тупым запросом к базе - то не будет шаблонов cck и тд
- Для комментирования войдите или зарегистрируйтесь
ноды с помощью views получилось отобразить, а коменты пока не получается (совершенно левые коменты почему-то идут в выдаче)
- Для комментирования войдите или зарегистрируйтесь
Написал модуль на эту тему http://drupal.org/project/usercontent . Обсуждение и предложения здесь http://www.drupal.ru/node/4694
- Для комментирования войдите или зарегистрируйтесь
я как раз хотел скачать этот модуль.
что ж только для четвертой версии?
- Для комментирования войдите или зарегистрируйтесь
подскажите что здесь изменить, чтоб вывод был только из одного типа материалов?
или другой код нужен? подскажите
<?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;
}
?>- Для комментирования войдите или зарегистрируйтесь
спасибо
- Для комментирования войдите или зарегистрируйтесь







Комментарии