0

我编写了一个正确显示 Joomla 用户 ID 的脚本(在两个文件中),如下所示:

//this is testy.php  
define( '_JEXEC', 1 );  
define('JPATH_BASE', dirname(__FILE__));  
define( 'DS', DIRECTORY_SEPARATOR );  
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );  
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );  
$mainframe =& JFactory::getApplication('site');  
$id = JFactory::getUser()->id;

上述文件位于 Joomla 根文件夹中。另一个文件位于不同的目录中,如下所示:

//this is testid.php  
include '../../joomla/testy.php';  
echo $id;

但是,问题是,当我将“echo”更改为“return”并将第二个代码片段放入我的 Flex 4 数据服务脚本文件中时,就像这样......

function getUserId() {  
  include '../../joomla/testy.php';  
  return $id;  
}

...我收到一个 Flex 错误,上面写着:

Fatal error: Class 'JRequest' not found in /var/www/html/joomla/libraries/joomla    /import.php on line 33

我对这个错误感到非常困惑,并感谢 stackoverflow 社区可能提出的任何建议。

非常感谢!

扎克

4

1 回答 1

1

问候拉万,

我确实找到了一个解决方案,但它有点hackish,所以我不知道你是否想使用它。

在您的 Flex 应用程序中,添加两件事。首先是一个方法,看起来像这样:

private function initVars():void {
   userid = FlexGlobals.topLevelApplication.parameters.id;
}

然后,将此行添加到应用程序标头:

creationComplete="initVars()"

与原始问题一样,在 Joomla 目录中包含“testy.php”文件。创建 Flex 应用程序的发布版本后,打开应用程序的包装 html 文件(位于发布版本目录中)。将此文件的扩展名更改为“.php”。然后在这个新创建的 PHP 文件中,添加这些行(注意:您可能必须更改目录移动以适应您的目录方案):

<?
include '../../joomla/testy.php';
idVar $id;
?>

在发布构建文件中,您会发现这一行:

var flashvars = {};

Flex 允许我们在应用程序中包含外部变量。因此,直接在此行下方添加一个新行,因此:

flashvars.id = "<?php echo $idVar; ?>";

我们现在告诉我们的 Flex 应用程序包含一个名为“id”的 flashvar,它与我们从 Joomla 中提取的用户 ID 相同。

总之,您现在可以使用 Flex 变量“userid”(在我们上面编写的 Flex 方法中定义)来执行诸如从数据库中获取用户数据之类的操作。我称此解决方案为骇人听闻的,因为每次创建新的发布版本时,都必须将 html 包装器更改为 php 并像我们上面所做的那样对其进行更改。

希望这可以帮助。

干杯,

扎克

于 2011-01-12T19:47:11.050 回答