Вот, попытаюсь выложить наработки, как обещался.
(сори за некоторую сумбурность выкладок, но у меня всегда так: либо очень кратко, либо начинаю слишком много расписывать)Рассказываю на примере сайта
www.talica.ru (сайт переезжал с самописного движка и форума, так что еще стояла задача переноса пользователей и семи тысяч сообщений, но это уже другая история).
Интеграция была сделана на основе компонента RokBridge (тогда еще версии RC5, сейчас он похорошел). Визуальная интеграция была реализована разработкой стиля для форума, выглядящего так же как сайт (так что чуда тут нет, всё приходится делать руками).
Для подстановки аватар и прочей интеграции сделал несколько хаков в файлах форума - но это было не очень красивое решение и требовало отслеживать руками изменения при обновлении версий форума.
Сейчас переделал воспользовавшись
этой идеей. Идея заключается в том, чтобы все подстановки аватар и прочего сделать на самом позднем этапе отработки страницы форума - при генерации страницы из шаблона.
В phpBB3 в файлах шаблона можно использовать php-код, если разрешить его через настройки администратора (php-код обрамляется в теги
<!-- PHP -->...<!-- ENDPHP -->). Мы пишем специальный файл для шаблона (joomla.html), который подставляет пути аватарок и подменяет линки и тексты где нам надо в переменной-массиве, в которой хранятся все данные, используемые при генерации страницы из шаблона. И не забываем подключить этот наш файл. Подключение делаем через include в файле шаблона overall_header.html - он загружается первым со всеми страницами форума (вроде бы).
Итак, перечень действий такой (все действия для форума и в папке форума):- Заходим в администраторский раздел форума (ACP). Переходим в Общие -> Конфигурация сервера -> Безопасность, включаем пункт Разрешить php в шаблонах;
- Создаём в папке с шаблонами стилей файл joomla.html (можно и с другим именем). Папка с шаблонами стилей - это внутри форума styles/pro_silver/template/, вместо pro_silver может быть ваш стиль, у меня это talica_classic;
- Открываете в той же папке файл overall_header.html и первой строкой вставляете подключение нашего файла:
<!-- INCLUDE joomla.html -->
- Очищаете кэш форума (можно перекомпилировать шаблоны и т.п.). Всё должно работать
Но перед этим нужно написать правильный joomla.html
Основная проблема - связать пользователя форума с пользователем в Joomla, т.к. у них разные идентификаторы (
id). Но имена у них одинаковые
(по крайней мере при интеграции через RokBridge
jos_users.username == phpbb_users.username; мыльные адреса тоже одинаковые, тока вроде регистр может не всегда совпадать). А раз по именам связь устанавливается то такой SQL запрос нам поможет:
SELECT u.id, u.username, u.name, c.avatar FROM #__users u, #__comprofiler c WHERE u.id = c.user_id AND u.username = имя_юзера_в_phpBB3
От этого можно уже плясать дальше. А чтобы вам плясалось веселее...
1. Можно взять вариант от
cambler'а. Он у себя решает даже больше проблем: выводит полное имя из Joomla (и заменяет им текст при цитировании сообщений) и вытаскивает дополнительные поля из Community Builder'a подменяя ими форумовские (адрес сайта, место жительства, звание и т.п.). На результат его работы можно глянуть тут:
http://www.modelinsider.com/community/Мне всё это было не нужно, поэтому я написал короче - только для аватар и ссылок на профиль. Ну и сделал несколько вещей для собственного сайта.
2. Мой вариант с аватарами из CB, ссылками на профиль туда же и линками на вход/выход (ну вы поняли куда они ведут).
Оба файла лежат в архиве - разберётесь.
При необходимости можете донастроить под свой лад. В частности приписать нужные
Itemid и т.п. Также у меня для пользователей без аватар выводится обезличенная аватара из стандартного шаблона CB. Вы можете прописать свой путь или вообще отменить её.
P.S.: Данная реализация joomla.html расчитана на использование в связке с RokBridge (о чём говорит вызов функции loadJoomla15() - функция определена в плагине аутентификации auth_joomla.php). Однако можно сделать так же и без RokBridge, если периписать код работы с БД. Можно написать самому всю обработку (mysql_*), можно воспользоваться обёрткой от phpBB3 (как сначала делал я), сейчас уже не помню, но копать в эту сторону:
global $db;
$rows = $db->sql_query('SELECT u.id, u.username, u.name, c.avatar FROM jos_users u, jos_comprofiler c WHERE u.id = c.user_id AND u.username = '.$db->sql_escape((имя_юзера_в_phpBB3)));
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$avatar = $row['avatar'];
Я кончил... Можно и покурить...
P.S.: Найдёте ошибки - не стесняйтесь.
[вложение удалено Администратором]