Как на форуме вывести последнюю тему из текущего раздела

Главные вкладки

Аватар пользователя Shedko Shedko 1 декабря 2006 в 5:13

Для вывода форума использую слегка измененную функцию phptemplate_forum_display и связанные с ней, кто-нибудь знает как при выводе раздела/контейнера форума вывести еще и последний измененный пост, как это делается во всех "отдельных" форумных движках.

Чтобы лучше было понятно, что хочу получить, вот рисунок:

[img]http://img81.imageshack.us/img81/8025/000qn9.png[/img]

надо то, что обведено красным. Т.е. последние обсуждения из разделов. А не просто дата последнего сообщения и имя пользователя - как это делается "из коробки"

Комментарии

Аватар пользователя Shedko Shedko 3 декабря 2006 в 9:59

Вопрос в продолжение темы.

Может тогда кто знает как из $forum->tid или $last_post->uid узнать последний комментарий и заголовок этого последнего комментария ?

(т.е. именно эти данные доступны о последнем комментарии в функции phptemplate_forum_list )

Если уж совсем ни как, то може кто подскажет как поменять функцию function forum_get_forums($tid = 0) { из модуля forum.module чтобы она возвращала еще и заголовок комментария, а не только его время и автора. Т.е. так как только начинаю осваивать PHP + SQL, то даже не могу сформировать зарос.

там идет запрос
$sql = "SELECT r.tid, COUNT(n.nid) AS topic_count, SUM(l.comment_count) AS comment_count FROM {node} n INNER JOIN {node_comment_statistics} l ON n.nid = l.nid INNER JOIN {term_node} r ON n.nid = r.nid WHERE n.status = 1 AND n.type = 'forum' GROUP BY r.tid";

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

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 3 декабря 2006 в 11:31

Все изменения касаются forum.module:

Эпизод 1:
в функцию forum_get_forums() после присвоения
$last_post->uid = $topic->last_comment_uid;
добавляем
$last_post->title = $topic->last_comment_title;
$last_post->nid = $topic->last_comment_nid;
ищем выше длиннющий SQL запрос, и вставляем внутрь n.title и n.nid, получается (приведен фрагмент):
, ncs.last_comment_uid, n.title AS last_comment_title, n.nid AS last_comment_nid FROM {node}

Эпизод 2:
в функции _forum_format() меняем определение на
function _forum_format($topic, $title = false)
сразу после определения вставляем такую конструкцию:

  if ($title && $topic && $topic->timestamp && $topic->title) {
  	return l($topic->title, "node/$topic->nid") ."<br />". t('time ago<br />by !author', array('time' => format_interval(time() - $topic->timestamp), '!author' => theme('username', $topic)));
  }

Эпизод 3:
находим вызов функции _forum_format(), в файле таких вызовов всего три, в одном месте используются подряд, в другом одиночный вызов который нам и нужен, изменяем вызов таким образом:
_forum_format($forum->last_post, true)

Надеюсь понятно объяснил. Если нет, переспрашивайте, не смущайтесь.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 3 декабря 2006 в 11:34

Собственно, это решение только для показа последних тем в форумах, не для показа последних сообщений.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя dyp@drupal.org dyp@drupal.org 3 декабря 2006 в 23:04

Этот баг висит насколько я помню со времен 4.6 и в 5.0 он тоже не решен. Были промежуточные фиксы которые сейчас не работают. Бред конечно

Аватар пользователя Shedko Shedko 3 декабря 2006 в 22:40

Спасибо, это именно то что надо.

Буду пробовать.

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

Только надеюсь что это "последняя" тема будет темой с последним комментарием.

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 4 декабря 2006 в 0:24

Это будет именно та тема, авторство и время создание которой уже были там указаны.
еще вроде не видел форумов, которые показывают еще и заголовок последнего сообщения
Возможно, это потому, что у сообщений форумов нету заголовков Smile Но вот ссылочка на последний комментарий мне вроде бы встречалась...
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя Shedko Shedko 4 декабря 2006 в 2:40

Все замечательно работает.
Еще раз спасибо.

[img]http://img206.imageshack.us/img206/4649/lastcommenthh8.png[/img]

А теперь немного лирики.

Теперь осталось только вынести все изменения из модуля forum.module в файл темы. Чтобы не вносить в файл forum.module описанные изменения каждый раз при обновлении ядра. (да я такой ленивый)

Допустим функцию _forum_format можно объявить как _forum_format2 в template.php и вызывать когда будет необходимо именно ее.

т.е. в template.php скопировать функцию
function theme_forum_list($forums, $parents, $tid) {

и назвав ее как
function phptemplate_forum_list($forums, $parents, $tid) {
в ней и будем менять _forum_format на _forum_format2.

Остается только одна большая проблема, и это функция:
function forum_get_forums($tid = 0) {

ее нельзя переопределить Sad

Т.е. надо писать ее замену, которая из имеющихся
$last_post->uid = $topic->last_comment_uid;
$forum->last_post = $last_post;
будет вытягивать данные о последнем посте.

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 4 декабря 2006 в 3:02

Лучше даже не заморачиваться, судя по состоянию модуля forum его либо вовсе не станут трогать, либо серьёзно переработают. Ну не отвечает он общей концепции Друпала. У меня имеется чувство (можно проверить по CVS), что этот модуль наследуется от очень древнего релиза и претерпел с тех пор минимальные изменения только в части совместимости с обновленным API.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя Shedko Shedko 4 декабря 2006 в 3:16

Вполне возможно что его и не обновят до нормального состояния. Ибо на drupal.org все комментарии относящиеся к форуму, в конце в концов всегда ссылаются на то, что лучше использовать отдельный движок для форума (phpBB) либо UIForum (или как там его).

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

А на счет не стоит "заморачиваться", то вообще не стоило тогда заморачиваться с Drupal, а надо было использовать html файлы со вставками java Smile

Аватар пользователя Shedko Shedko 4 декабря 2006 в 4:59

к стати, по теме нашел для стандартного модуля форума весьма удобный модуль forum_admin_links

добавляет возможность разрешать/запрещать комментировать тему форума а также опубликовать/распубликовать тему форума

[img]http://img133.imageshack.us/img133/5638/adminlinks2ca1.png[/img]

Только одно Но, эти ссылочки надо ручками прописывать в шаблон.

Найти можно на:
http://drupal.org/node/62867