Для вывода форума использую слегка измененную функцию phptemplate_forum_display и связанные с ней, кто-нибудь знает как при выводе раздела/контейнера форума вывести еще и последний измененный пост, как это делается во всех "отдельных" форумных движках.
Чтобы лучше было понятно, что хочу получить, вот рисунок:
[img]http://img81.imageshack.us/img81/8025/000qn9.png[/img]
надо то, что обведено красным. Т.е. последние обсуждения из разделов. А не просто дата последнего сообщения и имя пользователя - как это делается "из коробки"
Комментарии
Вопрос в продолжение темы.
Может тогда кто знает как из $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";
а что нужно дописать, чтобы он еще и заголовок комментария вытягивал ?
Все изменения касаются 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_nidFROM {node}
Эпизод 2:
в функции _forum_format() меняем определение на
function _forum_format($topic, $title = false)
сразу после определения вставляем такую конструкцию:
Эпизод 3:
находим вызов функции _forum_format(), в файле таких вызовов всего три, в одном месте используются подряд, в другом одиночный вызов который нам и нужен, изменяем вызов таким образом:
_forum_format($forum->last_post, true)
Надеюсь понятно объяснил. Если нет, переспрашивайте, не смущайтесь.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы
Собственно, это решение только для показа последних тем в форумах, не для показа последних сообщений.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы
Этот баг висит насколько я помню со времен 4.6 и в 5.0 он тоже не решен. Были промежуточные фиксы которые сейчас не работают. Бред конечно
Спасибо, это именно то что надо.
Буду пробовать.
А на счет того, что это только "для показа последних тем", то в принципе, еще вроде не видел форумов, которые показывают еще и заголовок последнего сообщения.
Только надеюсь что это "последняя" тема будет темой с последним комментарием.
Это будет именно та тема, авторство и время создание которой уже были там указаны.
еще вроде не видел форумов, которые показывают еще и заголовок последнего сообщения
Возможно, это потому, что у сообщений форумов нету заголовков Но вот ссылочка на последний комментарий мне вроде бы встречалась...
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы
Все замечательно работает.
Еще раз спасибо.
[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) {
ее нельзя переопределить
Т.е. надо писать ее замену, которая из имеющихся
$last_post->uid = $topic->last_comment_uid;
$forum->last_post = $last_post;
будет вытягивать данные о последнем посте.
Лучше даже не заморачиваться, судя по состоянию модуля forum его либо вовсе не станут трогать, либо серьёзно переработают. Ну не отвечает он общей концепции Друпала. У меня имеется чувство (можно проверить по CVS), что этот модуль наследуется от очень древнего релиза и претерпел с тех пор минимальные изменения только в части совместимости с обновленным API.
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы
Вполне возможно что его и не обновят до нормального состояния. Ибо на drupal.org все комментарии относящиеся к форуму, в конце в концов всегда ссылаются на то, что лучше использовать отдельный движок для форума (phpBB) либо UIForum (или как там его).
UI конечно приятный модуль, но по мне главный его недостаток - нельзя использовать его, если на сайте уже есть форум, т.е. при установке старые темы в него не перекочуют.
А на счет не стоит "заморачиваться", то вообще не стоило тогда заморачиваться с Drupal, а надо было использовать html файлы со вставками java
Вот чего действительно не стоит - так это впадать в крайности
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы
к стати, по теме нашел для стандартного модуля форума весьма удобный модуль forum_admin_links
добавляет возможность разрешать/запрещать комментировать тему форума а также опубликовать/распубликовать тему форума
[img]http://img133.imageshack.us/img133/5638/adminlinks2ca1.png[/img]
Только одно Но, эти ссылочки надо ручками прописывать в шаблон.
Найти можно на:
http://drupal.org/node/62867