Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查访问者是否已登录,如果是,请设置一个变量以确定进一步的操作_Php_Joomla_Joomla2.5 - Fatal编程技术网

Php 如何检查访问者是否已登录,如果是,请设置一个变量以确定进一步的操作

Php 如何检查访问者是否已登录,如果是,请设置一个变量以确定进一步的操作,php,joomla,joomla2.5,Php,Joomla,Joomla2.5,我使用的是Joomla 2.5,在我的站点头部有一个模块,代码如下: <?php $user =JFactory::getUser()->guest; if ($user->guest) { echo 'Please sign up or sign in to view this' } else { echo 'Here is the content'; } ?> 我尝试但没有成功

我使用的是Joomla 2.5,在我的站点头部有一个模块,代码如下:

        <?php
$user =JFactory::getUser()->guest;
    if ($user->guest) {
      echo 'Please sign up or sign in to view this'
    }
    else {
      echo 'Here is the content';
    }
       ?>

我尝试但没有成功的是在第一个if语句中添加变量$member。如果此人未登录以向其显示回显,但也将$member设置为==true

我为什么要这么做?我认为,如果我检查$member的状态,会使站点加载更快,而不是调用Joomla API来确定用户是否登录

确定访问者是否是每个页面中的成员的调用大约为5-7次。当我使用JFactory::getUser()函数(上面的所有代码)5-7次时,它确实会使网站的速度减慢一点。这就是为什么我想在第一次调用中创建$member==true。如果我认为这在站点性能/速度方面会更好,请纠正我的错误

我试过这个:

        <?php
$user =JFactory::getUser()->guest;
    if ($user->guest) {
      echo 'Please sign up or sign in to view this'
      $member == true;
    }
    else {
      echo 'Here is the content';
    }
       ?>

我在header模块中有上面的代码。但是,当我稍后在同一页面的其他模块中或在文章中使用php代码时,它不会识别$member的状态,并且总是确定用户未登录


我做错了什么?我猜是变量范围的问题,我检查了我的PHP书籍,但没有找到错误。感谢您的帮助。

您已经在呼叫
$user->guest
,请尝试更改:

$user = JFactory::getUser()->guest;
为此:

$user = JFactory::getUser();
作为替代方案,您也可以使用以下方法:

$user =& JFactory::getUser();
if($user->id=0){
    echo 'Please sign up or sign in to view this'
    $member == true;
}
else {
    echo 'Here is the content';
}

您可以在一行中完成这项工作,重构代码将是

  $member = (JFactory::getUser()->id) ? true : false ;

如果这一变化会产生任何可测量的影响,我会非常惊讶,更不用说重大影响了。请分享您的发现。$user=JFactory::getUser()->guest;如果($user->guest)没有意义$user=JFactory::getUser()如果($user->guest),为什么要使用
$member==true?如果总是使用
if($member=true){echo“内容”}
,只需使用
if($user->guest){echo“内容”}
。当您可以使用内置Joomla方法时,分配另一个变量是没有意义的,因为分配变量
$member
也必须进行此检查。GetUser实际上会缓存调用的每个用户id的结果(或者在本例中没有用户id,所以是当前用户)因此,每个后续调用都不必返回数据库。它应该与检查局部变量的速度一样快,除非您不会有任何范围问题,因为您可以在任何地方使用
JFactory::getUser
。当然不会。而且可能也没有理由将布尔值指定给
$user
。给Joomla开发人员一些信任:)(并查看
工厂
设计模式)