Интеграция сеанса phpBB: использование данных в функции


Я пытаюсь интегрировать сеансы phpBB3 и данные на внешний веб-сайт. Я следил за официальным ресурсом для этого, а также прочитал некоторые полезные советы, но я не нашел конкретного решения своей проблемы.

На свой сайт я включаю phpbb.php который содержит следующий код:

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../../forums/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>

Корневой путь настроен нормально, кажется, все работает, и я могу использовать данные на сайте с таким кодом (пример):

if ($user->data['user_id'] == ANONYMOUS)
{
    $tpl = new USPTemplate();
    $tpl->load("error_nologin.tpl");
    $tpl->display();
}
else
{
    $tpl = new USPTemplate();
    $tpl->load("review_submit.tpl");
    $tpl->assign("test",'Thanks for logging in, ' . $user->data['username']);
    $tpl->display();
}

Это было бы загружайте различные шаблоны с помощью системы шаблонов, которую я использую, в зависимости от того, зарегистрирован ли пользователь на форуме, и если да, он также печатает свое имя пользователя. Все это работает просто отлично.

Проблема, однако, заключается в том, когда я пытаюсь использовать функцию:

function print_login() {
    if ($user->data['user_id'] == ANONYMOUS)
    {
        return "Not currently logged in. [ Log in ]";
    }
    else
    {
        if ( $user->data['user_colour'] != null)
        {
            return "Hello, <b style=\"color: #".$user->data['user_colour']."\">".$user->data['username']."</b>. [ Log out ]";
        }
        else return "Hello, ".$user->data['username'].". [ Log out ]";
    }
}

Если я сделаю это, даже если функция находится на странице, которая включает phpbb.php, или даже внутри phpbb.php сам по себе сеанс не будет распознан, и результатом всегда будет:

Здравствуйте,.[ Выйдите из системы]

Почему функции, которые я определяю, не могут получить доступ к данным phpBB?

Author: ROMANIA_engineer, 2013-06-08

1 answers

Переменные PHP должны ссылаться на глобальные переменные, потому что

<?php
$a = 2;

function test() {
  echo $a;
}
?>

Не будет работать, и

<?php
$a = 2;

function test() {
  global $a;

  echo $a;
}
?>

Будет работать.

Для того, чтобы ваша функция работала, вы должны объявить глобальные переменные внутри:

function print_login() {
    global $user;

    if ($user->data['user_id'] == ANONYMOUS)
    {
        return "Not currently logged in. [ Log in ]";
    }
...
 3
Author: Stefan Moraru, 2013-06-08 13:56:23