Как добавить картинку из первого поста к названию темы phpbb3

Требовалось добавить на форуме фото из первого поста к названию темы. Движок phpBB 3.0.9., шаблон prosilver.

Единственным полуготовым решением на тот момент оказался мод Topic images from attachments v0.2, готовых вообще не нашлось. А полуготовое потому, что требуется "доработать напильником".

Что дает модификация:

Возможность использования изображений тем настраивается для каждого форума
Группам/пользователям можно назначать права на установку изображений тем
В админке можно задать максимальный размер миниатюры для изображения тем (Общие -> Конфигурация -> Размещение сообщений -> Максимальная ширина/высота изображения темы) и отключать этот функционал совсем, установив 0
Стандартная структура работы с миниатюрами не нарушена, миниатюры тем не имеют отношения и обычным миниатюрам изображений
При использовании изображений небольших размеров (меньше максимального для миниатюр тем) само изображение выводится из оригинального файла, следовательно можно использовать небольшое анимированное gif-изображение

Как работает:

Пользователь пишет первый пост в теме, загружает изображение (вложения для работы мода должны быть разрешены), жмет "назначить изображение теме", по заданным в админке размерам генерируется превьюшка, которая пишется в папку с вложениями (iles/) с префиксом topic_image_ .Перед названиями в списке тем появляется загруженное изображение.

Установка Topic images

Качаем дистрибутив. Скачать мод. Дополнительная модификация для шаблона subsilver.

Распаковываем на локальном компьютере.

Открываем в браузере install_mod 0.2.xml , выбираем Русский язык (собственно, все понятно и на английском, но есть места, требующие особой внимательности).

Действуем по инструкции:

1. Выполняем SQL запросы к БД (в последнем была опечатка, ниже приведено исправленное)

INSERT INTO `phpbb_acl_options` (auth_option, is_global, is_local, founder_only) VALUES ('f_topic_image', 0, 1, 0);

INSERT INTO `phpbb_config` VALUES ('img_max_topic_image_width', 150, 0);

INSERT INTO `phpbb_config` VALUES ('img_max_topic_image_height', 100, 0);

ALTER TABLE `phpbb_attachments` ADD topic_image tinyint(1) UNSIGNED NOT NULL DEFAULT 0;

ALTER TABLE `phpbb_forums` ADD forum_allow_topic_image TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE `phpbb_topics` ADD topic_image_id MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0;

UPDATE phpbb_attachments SET topic_image = 1 WHERE in_message = 0 AND post_msg_id IN (SELECT topic_first_post_id FROM phpbb_topics WHERE topic_attachment = 1)

2. Вносим коррективы в файлы:

adm\style\acp_forums.html,
download\file.php,
includes\acp\acp_board.php,
includes\acp\acp_forums.php,
includes\acp\acp_styles.php,
includes\functions_admin.php,
includes\functions_posting.php,
includes\message_parser.php,
language\en\acp\board.php,
language\en\acp\forums.php,
language\en\acp\permissions_phpbb.php,
language\en\posting.php,
language\ru\acp\board.php,
language\ru\acp\forums.php,
language\ru\acp\permissions_phpbb.php,
language\ru\posting.php,
posting.php,
styles\prosilver\imageset\en\imageset.cfg,
styles\prosilver\imageset\ru\imageset.cfg,
styles\prosilver\template\posting_editor.html,
styles\prosilver\template\viewforum_body.html,
styles\prosilver\theme\colours.css,
viewforum.php

Все по инструкции с одним изменением:

в styles\prosilver\template\viewforum_body.html

находим:

		<dt<!-- IF topicrow.TOPIC_ICON_IMG and S_TOPIC_ICONS --> style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;"<!-- ENDIF --> title="{topicrow.TOPIC_FOLDER_IMG_ALT}"><!-- IF topicrow.S_UNREAD_TOPIC --><a href="{topicrow.U_NEWEST_POST}">{NEWEST_POST_IMG}</a> <!-- ENDIF --><a href="{topicrow.U_VIEW_TOPIC}" class="topictitle">{topicrow.TOPIC_TITLE}</a>

заменяем на:

		<dt<!-- IF topicrow.TOPIC_ICON_IMG and S_TOPIC_ICONS --> style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;"<!-- ENDIF --> title="{topicrow.TOPIC_FOLDER_IMG_ALT}"><!-- IF S_ALLOW_TOPICS_IMAGES and S_TOPICS_WITH_IMAGES --><span style="width:{S_TOPIC_IMAGE_MW}px; float:left" class="topic_image<!-- IF topicrow.TOPIC_IMAGE_LINK --> spinning<!-- ENDIF -->"><a href="{topicrow.U_VIEW_TOPIC}"><img src="<!-- IF topicrow.TOPIC_IMAGE_LINK -->{topicrow.TOPIC_IMAGE_LINK}"<!-- ELSE -->./images/spacer.gif" class="no-photo"<!-- ENDIF --> alt="{topicrow.TOPIC_TITLE}" /></a></span><!-- ENDIF --><!-- IF topicrow.S_UNREAD_TOPIC --><a href="{topicrow.U_NEWEST_POST}">{NEWEST_POST_IMG}</a> <!-- ENDIF --><a href="{topicrow.U_VIEW_TOPIC}" class="topictitle">{topicrow.TOPIC_TITLE}</a>

Так помимо отображения в шаблоне миниатюры картинки из первого поста будет установлено и обтекание фото слева.

Все файлы открывать в обычном текстовом редакторе, сохранять в кодировке utf-8. Будьте внимательны, кое где код нужно вписать не после найденной строки, а в эту же строку между определенными символами.

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

Copy: root\styles\prosilver\theme\images\wait.gif
To: styles\prosilver\theme\images\wait.gif
Copy: root\styles\prosilver\imageset\en\no-photo.gif
To: styles\prosilver\imageset\en\no-photo.gif
Copy: root\styles\prosilver\imageset\ru\no-photo.gif
To: styles\prosilver\imageset\ru\no-photo.gif

4. Чистим кэш

5. Идем в админ раздел:

  • Права доступа - Форумные права групп - Группа - Форум - Расширенные права - Может назначать изображения темам
  • Форумы - Такой-то форум - Изображения тем (да)

На форум установлен seo mod , вроде не конфликтуют.

Собственно, картинка темы при отсутствии в первом посте изображения (или если оно теме не присвоено) лишняя, если ее не копировать на сервер и не использовать, будет просто пустое место вместо изображения темы. Если используете эту заставку, не забудьте очистить кэш картинок вашего шаблона.

Еще есть с этими изображениями тем такая странность: в списке активных тем категории изображений нет, НО! После некоторых доселе загадочных для меня манипуляций изображения появляются. Вот эти действия:

в админке - форумы - в выбранной категории жмем "изменить" - ставим тип форума "форум", ставим "Изображения тем - Да", жмем отправить.

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

Теперь и активные темы категории у нас с изображениями тем.