我在使用DirectPHP插件的文章中添加了php。 我的目标是创建一个脚本,当用户有member = true时,该脚本将包含一个带文本的文件;什么时候不显示任何东西。
我已将这段代码添加到徽标旁边顶部的模块中:
<?php
if ($user =JFactory::getUser()->guest)
{
$member = false;
echo "Welcome guest, sign up and read nice quotes";
}
else
{
$member = true;
$user =& JFactory::getUser();
echo "Welcome " . $user->username;
}
?>
然后在文章中我有:
<?php
if ($member == false)
{
$file = file_get_contents ('quotes/quotes.html');
echo $file;
}
?>
<hr id="system-readmore" />
<?php
if ($member == true)
{
include_once JPATH_SITE.'/quotes/random.php';
echo ShowQuotes();
}
?>
我无法找到导致此问题无法运行的问题。显示$member = false;
和$member = true;
的引号包括始终被解析,尽管if语句? file_get_contents也一样吗?我试图查看标题中的$ member声明是否保留在解析中并写道:
<?php
if ($member = true)
{
echo "Logged in";
}
?>
并且效果很好所以问题出在include_once
和file_get_contents
之内,我试图尽可能地确定问题。
提前感谢您的帮助!
答案 0 :(得分:1)
这可能是你的问题:
if ($member = true)
{
echo "Logged in";
}
始终将true
的值指定为$member
。
同样在这里:
if ($user =JFactory::getUser()->guest)
您可能会遇到相同的分配问题(不确定您是否打算设置$user
并在此处执行条件。
我可能会建议养成像这样编写条件的习惯:
if (true === $member) { ... }
通过反转项目的顺序,如果您不小心输入=
而不是==
或===
,那么您将收到错误,而不是让代码无声地执行
答案 1 :(得分:0)
你似乎在这里有一个范围问题:你在一个模块中声明$ member,但是$ member将无法用于文章:并且php将评估($ something == false)以便在$ something时始终成功未定义,如果你想检查变量是否真的 false你需要使用($ something === false)。在此处阅读更多内容:http://www.php.net/manual/en/language.types.boolean.php
话虽如此,因为JFactory :: getUser() - &gt; guest没有真正的开销,只需在你的文章中使用它!
顺便说一句,在你的php配置中启用通知(在屏幕上或在日志文件中)并确保你在开发时阅读它,它会告诉你什么是错的,开发而不会看到错误是一个猜谜游戏,你只能将你的头撞到墙上这么多次......你最终需要打开灯: - )