Всем доброго времени суток.
Прошу о помощи. Решил сделать набор модулей для интеграции phpbb в OpenCart . Началось все с того, что возникла необходимость объединить регистрацию/авторизацию на PHPBB и OpenCart, но как оказалось простого добавления записей В БД было мало, загорелся и захотел написать еще пару модулей для интеграции phpbb в OpenCart (не наоборот).
Вот тут-то и возникла первая проблема. Я, конечно, могу выполнять запросы напрямую к БД и выдергивать нужные данные, но это не то. Нужно, чтобы скрипт имел доступ ко всем классам и выполнялся в контексте движка, дабы использовать все возможности phpbb.
Тут видел 2 варианта - создать дубликаты незаменимых классов phpbb и использовать их в OpenCart, либо запустить phpbb в контексте OpenCart и получать данные напрямую у phpbb. Первый вариант отпал сразу как я увидел внутренности в phpbb, мне бы пришлось создавать дубликаты классов почти всего движка. С вторым вариантом мне помогли (спасибо rxu):
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : 'd:/php/home/phpbb.im/forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/functions_url_matcher.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('viewforum');
var_dump($user); //проверено, работает, выводит то что нужно
Этот код (аналог index.php в OpenCart) инициализирует phpbb и все классы, которые понадобятся для его полноценной работы -> для получения данных из классов phpbb. Т.е. после инициализации в контроллере модуля можно было бы в написать:
$this->data['username'] = $user->data['username'];
Но проблема в том, что инициализация phpbb выполняется в контексте (в контроллере) OpenCart и как следствие - ошибки из-за одинаковых названий классов - request, cache и т.д. в этот список входят все основные классы OpenCart.
Нашел статью по пространствам имен в PHP, но там:
Что можно сделать в такой ситуации? Можно, конечно, написать свой мод для phpbb и запилить JSON API, но это не вариант.