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

Прислано: Shedko

пт, 01/12/2006 - 02:13

Другие статьи по теме:

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

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

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

Комментарии


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

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Shedko в вс, 03/12/2006 - 06: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 в вс, 03/12/2006 - 08: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 в вс, 03/12/2006 - 08:34.

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


Опубликовано Shedko в вс, 03/12/2006 - 19:40.

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

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

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

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


Опубликовано dyp@drupal.org в вс, 03/12/2006 - 20:04.

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


Опубликовано rapitosov@drupal.org в вс, 03/12/2006 - 21:24.

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


Опубликовано Shedko в вс, 03/12/2006 - 23:40.

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

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

Теперь осталось только вынести все изменения из модуля 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) {

ее нельзя переопределить :-(

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


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

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


Опубликовано Shedko в пн, 04/12/2006 - 00:16.

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

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

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


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

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


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

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

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

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

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


Новое на сайте

Ссылки партнёров