Сегодня хочу рассказать про то, как из нашего любимого MODX Revolution сделать, пусть и простенький, но вполне рабочий форум.
Для этих целей мы будем использовать пакет Discuss (Github, багтрекер), который можно найти в галерее дополнительных компонентов.
Он уже сейчас умеет регистрировать пользователей с аватарками (ЭТО ОЧЕНЬ ВАЖНО!!!1), есть удобная простая админка, к постам можно прикреплять файлы, можно задавать вопросы и т.д. Проще установить и посмотреть самому. Мне понравилось.
Есть несколько русскоязычных постов, в которых рассматривается процесс установки и использования предыдущих версий данного пакета, но это было раньше. Проект развивается, исправляется и не стоит на месте. Не спорю, конечно есть некоторые ошибки, но решение рабочее. Если не планируется большого форума, то я бы посоветовал. Хотя, для крупного форума все же лучше использовать отдельную специализирванную CMS.
Начать следует с того, что для работы потребуется MODX Revolution версии 2.2 и выше и PHP5 и выше.
Для нормальной работы Discuss нам потребуются пакеты Login и FormIt. Рассказывать о том, как устанавливать их я не буду. В сети куча примеров да и ничего сложного там нет.
Установка самого Discuss предельно проста и осуществляется через стандартный менеджер пакетов MODX Revolution. Просто ищете его среди всех проектов, жмакаете Загрузить, потом Установить. В процессе вам будет задана пара вопросов:
Итак, установка прошла успешно. Далее - настройка. Если вы не поставили галку около создания ресурса для Discuss, то самое время создать его. Должно получиться что-то подобное:
Хотя Discuss и включает в себя функционал регистрации и авторизации с использованием пакета Login, возможно, вы захотите использовать кастомизированные или уже созданные ранее страницы авторизации, регистрации и редактирования профиля для вашего форума. Никаких определенных требований для этих страниц не существует, все, что вам необходимо, так это создать 3 отдельные страницы под эти нужды, используя документацию Login. Единственное, что нужно сделать - это указать некоторые необходимые для Discuss параметры в вызовы Login, Register и UpdateProfile сниппетов:
Для Login добавьте эти пре- и пост-хуки из пакета Discuss:
Для Register:
Для UpdateProfile:
А после вызова сниппета UpdateProfile необходимо добавить:
Для полноценного редактирования пофиля, который используется на нашем форуме, можно добавить несколько дополнительных полей в чанк-шаблон формы редактирования:
<label for="signature">Signature <span class="error">[[!+up.error.signature:stripTags=`p,b,strong,i,a,ul,li`]]</span></label> <textarea name="signature:allowTags" id="signature">[[!+up.signature]]</textarea> <label for="use_display_name">Use Display Name in Forums <span class="error">[[!+up.error.use_display_name]]</span></label> <input type="hidden" name="use_display_name" id="use_display_name_hidden" value="0" /> <input type="checkbox" name="use_display_name" id="use_display_name" value="1" [[!+up.use_display_name:FormItIsChecked=`1`]] /> <label for="display_name">Display Name <span class="error">[[!+up.error.display_name]]</span></label> <input type="text" name="display_name" id="display_name" value="[[+up.display_name]]" /> <label for="show_online">Show Online Status <span class="error">[[!+up.error.show_online]]</span> </label> <input type="hidden" name="show_online" id="show_online_hidden" value="0" /> <input type="checkbox" name="show_online" id="show_online" value="1" [[!+up.show_online:FormItIsChecked=`1`]] /> <label for="show_email">Show Email in Forums <span class="error">[[!+up.error.show_email]]</span></label> <input type="hidden" name="show_email" id="show_email_hidden" value="0" /> <input type="checkbox" name="show_email" id="show_email" value="1" [[!+up.show_email:FormItIsChecked=`1`]] />
Для работы Discuss нам потребуется ЧПУ, без него ничего не получится. Поэтому в Настройках системы MODX ключ friendly_urls должен иметь положительное значение. Не лишним будет выбрать автоматическую генерацию псевдонимов (automatic_alias) и вложенность URL (use_alias_path), но это не обязательно. Кому как удобнее и больше нравится.
После настройки дружественных URL нам необходимо добавить несколько rewrite-правил в конфигурацию нашего сервера, чтобы всё заработало. Чуть ниже приведены примеры конфигураций для nginx и Apache.
nginx:
rewrite ^/forums/thread/([0-9]+)/(.*)$ /index.php?q=forums/&action=thread&thread=$1 last; rewrite ^/forums/u/(.+)$ /index.php?q=forums/&action=user&user=$1 last; rewrite ^/forums/board/([0-9]+)/(.*)$ /index.php?q=forums/&action=board&board=$1 last; rewrite ^/forums/category/([0-9]+)/(.*)$ /index.php?q=forums/&category=$1 last; rewrite ^/forums/(.+)$ /index.php?q=forums/&action=$1 last; rewrite ^/forums/(.+)/$ /index.php?q=forums/&action=$1 last;
В документации к Discuss для nginx приводится две конфигурации. Та, что подлиннее отказалась работать корректно. Возможно, что конфликтовали правила, которые уже были у меня до этого (если интересно - можете почитать о конфиге nginx для MODX Revo). Конфиг выше вполне выполняет свои функции, поэтому я остановился на нем.
Apache:
# If imported from SMF, you can include the following lines to make sure existing urls don't break. RewriteRule ^forums/index.php/topic,(.*).msg(.*).html$ forums/?action=thread&thread=$1&i=1 RewriteRule ^forums/index.php/topic,(.*).(.*).html$ forums/?action=thread&thread=$1&i=1&start=$2 RewriteRule ^forums/\?topic=(.+).(.+)$ forums/?action=thread&thread=$1&i=1 RewriteRule ^forums/index.php/board,(.*).(.*).html$ forums/?action=board&board=$1&i=1&start=$2 RewriteRule ^forums/\?board=(.+).(.+)$ forums/?action=board&board=$1&i=1 # Discuss rewrite rules RewriteRule ^forums/thread/([0-9]+)/(.*)$ forums/?action=thread&thread=$1 [L,QSA] RewriteRule ^forums/u/(.+)$ forums/?action=user&user=$1 [L,QSA] RewriteRule ^forums/board/([0-9]+)/(.*)$ forums/?action=board&board=$1 [L,QSA] RewriteRule ^forums/category/([0-9]+)/(.*)$ forums/?category=$1 [L,QSA] RewriteRule ^forums/(.+)$ forums/?action=$1 [L,QSA] RewriteRule ^forums/(.+)/$ forums/?action=$1 [L,QSA]
Данные правила необходимо вставлять до основных правил, которые обеспечивают работу MODX. Это необходимо соблюдать как для nginx, так и для Apache.
Кстати, следует упомянуть то, что по умолчанию в качестве псевдонима к странице форума используется "forums". Мне оно не очень нравилось и я его поменял. Для этого достаточно сменить псевдоним у ресурса, который отвечает за форум (тот, который должен был создаться автоматически после установки нашего форума), а также заменить все вхождения "forums" на нужное вам в конфигах, которые приводились выше.
Теперь, когда сервер, ресурсы и дружественные URL настроены, самое время взяться за конфигурацию самого Discuss. В админке переходим в Система -> Настройки системы, в фильтре в выпадающем селекте находим пространство имен discuss. Нам необходимо настроить следующие ключи:
Помимо перечисленных настроек вы можете найти и другие. Некоторые могут оказаться полезными в той или иной ситуации. Например, мне пригодилось discuss.debug_templates, когда необходимо было понять какой из множества чанков используется в том или ином месте в шаблоне страницы. discuss.theme позволяет выставить нужную тему (кстати, в Discuss можно использовать свои темы)
После всех манипуляций мы должны иметь готовый к употреблению форум на MODX Revolution, правда на английском языке. Но возможна русификация. Но это - тема отдельной статьи, ровно как и создание собственных шаблонов для Discuss. Как-нибудь расскажу.
По мотивам документации Discuss.
Если на ваш взгляд в данном посте присутствуют ошибки, неточности или у вас просто хорошее настроение - пишите комментарии. До встречи =)