我在我的网站上集成了phpbb3。
我的标题网页中有登录信息,如https://wiki.phpbb.com/External_Login中所述。
一切正常,但我想更进一步,我想在我的网站标题中有导航栏,然后我可以在我的网站标题中看到新消息和用户个人资料。 我正在使用此代码:
<?php
define('IN_PHPBB', true);
$phpbb_root_path = '../phpbb3/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>
<div class="registro">
<?php
if ($this->_rootref['S_USER_LOGGED_IN']) {
?>
<div class="navbar" style="background-image:url('../img/opaco.png');">
<div class="inner"><span class="corners-top"><span></span></span>
<?php
if (!$this->_rootref['S_IS_BOT'] && $this->_rootref['S_USER_LOGGED_IN']) {
?>
<ul class="linklist leftside">
<li class="icon-ucp">
<a href="<?php
echo (isset($this->_rootref['U_PROFILE'])) ? $this->_rootref['U_PROFILE'] : '';
?>" title="<?php
echo ((isset($this->_rootref['L_PROFILE'])) ? $this->_rootref['L_PROFILE'] : ((isset($user->lang['PROFILE'])) ? $user->lang['PROFILE'] : '{ PROFILE }'));
?>" accesskey="e"><?php
echo ((isset($this->_rootref['L_PROFILE'])) ? $this->_rootref['L_PROFILE'] : ((isset($user->lang['PROFILE'])) ? $user->lang['PROFILE'] : '{ PROFILE }'));
?></a>
<?php
if ($this->_rootref['S_DISPLAY_PM']) {
?> (<a href="<?php
echo (isset($this->_rootref['U_PRIVATEMSGS'])) ? $this->_rootref['U_PRIVATEMSGS'] : '';
?>">
<?php
echo (isset($this->_rootref['PRIVATE_MESSAGE_INFO'])) ? $this->_rootref['PRIVATE_MESSAGE_INFO'] : '';
?></a>)<?php
}
if ($this->_rootref['S_DISPLAY_SEARCH']) {
?> •
<?php
}
?>
</li>
</ul>
<?php
}
?>
<ul class="linklist rightside">
<?php
if (!$this->_rootref['S_IS_BOT']) {
if ($this->_rootref['S_DISPLAY_MEMBERLIST']) {
?><?php
}
if (!$this->_rootref['S_USER_LOGGED_IN'] && $this->_rootref['S_REGISTER_ENABLED'] && !($this->_rootref['S_SHOW_COPPA'] || $this->_rootref['S_REGISTRATION'])) {
?><li class="icon-
register"><a href="<?php
echo (isset($this->_rootref['U_REGISTER'])) ? $this->_rootref['U_REGISTER'] : '';
?>"><?php
echo ((isset($this->_rootref['L_REGISTER'])) ? $this->_rootref['L_REGISTER'] : ((isset($user->lang['REGISTER'])) ? $user->lang['REGISTER'] : '{ REGISTER }'));
?></a></li><?php
}
?>
<li class="icon-logout"><a href="<?php
echo (isset($this->_rootref['U_LOGIN_LOGOUT'])) ? $this->_rootref['U_LOGIN_LOGOUT'] : '';
?>" title="<?php
echo ((isset($this->_rootref['L_LOGIN_LOGOUT'])) ? $this->_rootref['L_LOGIN_LOGOUT'] : ((isset($user->lang['LOGIN_LOGOUT'])) ? $user->lang['LOGIN_LOGOUT'] : '{ LOGIN_LOGOUT }'));
?>" accesskey="x">
<?php
echo ((isset($this->_rootref['L_LOGIN_LOGOUT'])) ? $this->_rootref['L_LOGIN_LOGOUT'] : ((isset($user->lang['LOGIN_LOGOUT'])) ? $user->lang['LOGIN_LOGOUT'] : '{ LOGIN_LOGOUT
}'));
?></a></li>
<?php
}
?>
</ul>
<span class="corners-bottom"><span></span></span></div>
</div>
<?php
} else
//user is not logged in
{
include('loginGeneral.php');
// this is a login form
}
?>
</div>
如果用户没有注册,我会使用自定义登录表单,但如果用户是注册表,我会向导航栏显示一些修改过的表单。
当我在我网站的phpbb3菜单中时,该代码有效,我的意思是当我在论坛中浏览时,我可以在我的网站标题中显示导航栏,但是当我在我的主页中时,我得到
致命错误:在第2行的C:\ wamp \ www \ esp \ cabecera.php中不在对象上下文中时使用$ this
我认为该文件可能会加载一些文件并在整个代码中更改$ this-&gt; _rootref,但我有点迷失。
编辑:我仍然坚持这个,任何人都可以帮助我吗?我认为我必须用$ _rootref替换$ this-&gt; _rootref并且可能添加一些include但我不知道哪个。 感谢
答案 0 :(得分:0)
Un poco tarde quizas,pero $this->
se refiere al objeto que esta declarado,por eso no te funciona fuera del contexto,en tu site donde no existe ese objeto(面向对象编程)。
Lo mas seguro es que se refiera al objeto forum,donde esta declarada la variable _rootref
Lo mas facil seria verquéobjectoes $this
en ese contexto y llamarlo directamente con PHP desde fuera,sin usar Object Oriented o averiguar quien declara la variable _rootref['S_USER_LOGGED_IN']
y usar eso directamente。
Puedes probar poniendo un echo $this-> _rootref
enesapáginaparaver a que se traduce y tratar de usarlo luego,si te dice que no existe,tendras que ver donde esta declarado _rootref['S_USER_LOGGED_IN']
y trabajar con eso。
(英文)
可能有点晚了,但$this->
使用面向对象编程引用该页面中的声明对象。该对象仅存在于该上下文中,它不像您的其他非phpbb页面那样存在于它之外,因此无论如何您总是会得到该错误。
我没有仔细查看代码,但它可能是指论坛对象或任何包含_rootref
变量的对象。
最简单的方法可能是在该上下文中找出$this
引用的对象,并尝试从外部页面调用该对象。或者找出宣布_rootref['S_USER_LOGGED_IN']
的位置,并在您的网页或其变体中使用该功能。
您可以尝试在该页面上回显:echo $this->_rootref
以查看是否存在,如果不存在则echo $this->_rootref['S_USER_LOGGED_IN']
。除此之外,在项目中查找_rootref['S_USER_LOGGED_IN']
以查看它的声明位置。
希望这有助于某人。