Если перед вами стоит задача подключения форума к готовой системе, то советую вам обратить внимание на Vanilla Forum. А дальше — скучноватый пошаговый мануал =\
Для начала нам потребуется скачать последнюю версию форума с официального сайта, а поскольку я тут успел наступить на одни грабли — то качаем последнюю бету — vanilla-core-2.0.18b2.
Встраиваем
По умолчанию, Vanilla форум имеет прекрасную возможность — встраиваться в любую HTML страничку посредством JavaScript’a, для этого нам понадобится активировать плагин <Embed> Vanilla (идет в стандартной поставке) и получить код скрипта:
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://forum.your-domain.com/plugins/embedvanilla/remote.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
Так же советую использовать дефолтную тему «Embed-Friendly» для встроенного форума — она достаточно простая и удобная для кастомизации.
Единственная проблема которая у меня возникла при подобном подключении форума — это ошибки JavaScript’a — разработчики форума не в курсе о методе jQuery().delegate()
и используют jQuery('a').live('click')
, чем вызывают не очень адекватное поведение ссылок на странице без атрибута href.
Интеграция с использованием ProxyConnect
Как понятно из подзаголовка, нам потребуется скачать плагин Vanilla ProxyConnect. Устанавливаем и идем настраивать (Users > Authentication):
Тут всё просто, по пунктам (пути в примере полные, могут быть относительные):
- Ваш сайт
- Страничка для получения данных о вашем пользователе (о ней чуть далее)
- Страница регистрации
- Страница входа
- Страница выхода
Теперь займемся пунктом 2 — Authenticate URL. Это страничка, где у вас должны выводиться данные вашего текущего пользователя в простом формате:
UniqueID=1279 Name=Bob Email=bob@gmail.com TransientKey=qwerty DateOfBirth=1970-01-01 Gender=Male Roles=Member,Admin
- UniqueID — обязательное поле, UID пользователя в вашей системе
- Name — обязательное поле, username, или как он у вас обзывается
- Email — обязательное поле, email вашего пользователя
- TransientKey — ключ, для предотвращения CSRF атак (вам скорей всего не понадобится, для wordpress обязательно)
- DateOfBirth — дата рождения
- Gender — мальчик/девочка, Male/Female
- Roles — роли пользователя на Vanilla форуме, через запятую, можно IDшниками
Если у вас Zend Framework, то action будет выглядеть как-то так:
// disable View $this-&amp;gt;_helper-&amp;gt;layout()-&amp;gt;disableLayout(); $this-&amp;gt;_helper-&amp;gt;viewRenderer-&amp;gt;setNoRender(true); // get current User $user = Zend_Auth::getInstance()-&amp;gt;getIdentity(); if ($user) { echo &amp;quot;UniqueID={$user-&amp;gt;id}\n&amp;quot; . &amp;quot;Name={$user-&amp;gt;username}\n&amp;quot; . &amp;quot;Email={$user-&amp;gt;email}\n&amp;quot; . &amp;quot;Roles={$user-&amp;gt;role}\n&amp;quot;; } else { echo &amp;quot;UniqueID=\n&amp;quot; . &amp;quot;Name=\n&amp;quot; . &amp;quot;Email=\n&amp;quot;; }
Как это работает — когда пользователь заходит на форум, то Vanilla незаметно так стучится на нашу страничку с текущей сессией пользователя, и пытается получить о нем информацию. Если это удалось, то движок пытается найти соответсвующую запись у себя в БД — если нашел, то мы авторизированы, если не нашел соответсвия — регистриует нового пользователя с указанными данными и так же авторизирует. Если наша страничка не вернула данных о пользователе, то он либо будет послан на страницу Sign In указанную в настройках ProxyConnect, либо отобразит страницу авторизации форума (зависит, от того, что разрешено пользователю guest).
Из замеченного: для разлогинивания на форуме следует чистить куки:
// vanilla forum logout setcookie('Vanilla', ' ', time() - 3600, '/', '.domain.com'); unset($_COOKIE['Vanilla']);
Если пользователь авторизирован в вашей системе, а при входе на форум требуется логинится (банально клацнуть на кнопку, для запуска процесса авторизации), то это тоже поправимо — следует в вашем методе логина добавить следующую очистку куков (я их еще и в логаут добавил, так на всяк случай):
setcookie(&amp;quot;Vanilla&amp;quot;, &amp;quot;deleted&amp;quot;, time() - 1,'/', &amp;quot;.domain.com&amp;quot;, false); setcookie(&amp;quot;Vanilla-Volatile&amp;quot;, &amp;quot;deleted&amp;quot;, time() - 1, '/', &amp;quot;.domain.com&amp;quot;, false);
Официальная документация по ProxyConnect
Портирование с phpBB, vBulletin и т.д.
На случай если вы решили сменить движок форума, то это тоже предусмотрено ;) Качаем Vanilla Porter и заливаем его в корень вашего текущего форума (phpBB или что там у вас). Далее следуем простой инструкции по переносу данных:
- Экспорт форума в TXT файл хитрого формата
- Импорт этого самого файла
Как просто-то :) Ну для наглядности приведу еще скриншот самой тулзы:
Но без нюансов тоже не обошлось — первое с чем столкнулся это непонимание формата файла в архиве, пришлось распаковывать и заливать. Второе — во время импорта все текущие пользователи Vanilla будут удалены, включая вашу учетную запись, так что в определенный момент вам надо будет указать email нового админа из портированных данных, после чего вы получите ошибку авторизации, без паники, логинимся заново под новым админом и продолжаем импорт данных (будет такая кнопочка). Следующий шаг — вам потребуется назначить права для всех ролей пользователей, которые были перенесены со старого движка. И напоследок, когда пользователи со старой системы попробуют зайти на новый форум им высветится следующий диалог (это верно для Vanilla + ProxyConnect):
Подготовьте пользователей к правильным действиям заранее.
Еще такой момент, умные дядьки часто изменяют алгоритм хэшированя паролей, на этот случай прийдется выполнить следующие действия:
- Заменить имя метода хэширования на некоторый произвольный
- Добавить его поддержку в файле
vanilla/library/core/class.passwordhash.php
С первым всё совсем просто:
UPDATE GDN_User SET HashMethod = 'myHash' WHERE HashMethod = 'phpBB';
Второй пункт тоже не сложен — нам потребуется найти switch
в методе CheckPassword()
и добавить туда новый case
:
switch(strtolower($Method)) { /* ... */ case 'myhash': $Result = myMegaHashFunction($Password, $StoredHash); break; /* ... */ }
Документация по Vanilla Porter
Вместо вывода
Форум действительно стоит того, чтобы его установить и опробовать: много локализаций (включая русский и арабский) и полезных плагинов; простые для адаптации темы (хоть и Smarty используется); и таки удобная система интеграции.
Эх, не дали мне в свое время его интегрировать… А так очень симпатичный форум.
Спасибо, Антон! Пригодилось. Вот только, если юзер не залогинен – нужно показывать blank page, иначе будет создан юзер с пустым именем и айдишником.
Есть еще неприятность, надеюсь кому-то пригодится.
После включения активации через прокси коннект – вы больше не сможете выйти\войти тем админом, который был создан при установке форума. Т.е. как только вы потеряете куку этого юзверя – вы потеряете доступ в консоль. При авторизации через сайт с таким же именем плагин спросил о привязке аккаунта, но выбросил ошибку, хотя email и пароль были верными.
Вернуть доступ в админку просто – нужно новому юзверю сделать Roles=Administrator
К старому аккаунту, увы, доступа больше нет.
думаю какой форум ставит на блог ВП. Ванилия нормально интегрируется с ВП? Подхватывает его пользователей?
а что вы можете сказать про SMF форум?
здравствуйте! Интерисует вопрос? Как поменять ссылку логотипа на внешнюю? Блогадорю заранее!!!
Спасибо за информацию, теперь попробую объединить Vanilla с WordPress