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
Plugins 试图在Joomla';s仅在插件中使用LoginUser触发器_Plugins_Joomla_Setcookie - Fatal编程技术网

Plugins 试图在Joomla';s仅在插件中使用LoginUser触发器

Plugins 试图在Joomla';s仅在插件中使用LoginUser触发器,plugins,joomla,setcookie,Plugins,Joomla,Setcookie,我有一个非常简单的Joomla插件,我正在编写该插件,其中包含一个带有电子邮件地址的cookie,其他应用程序可以使用它。这是所有内部使用,它不会被分发。无论如何,插件安装得很好,但它不会创建cookie。我正在使用Chrome浏览器的开发者视图查看cookie是否出现,但它从未出现过 function onLoginUser() { $app = &JFactory::getApplication(); // Get Joomla's user object

我有一个非常简单的Joomla插件,我正在编写该插件,其中包含一个带有电子邮件地址的cookie,其他应用程序可以使用它。这是所有内部使用,它不会被分发。无论如何,插件安装得很好,但它不会创建cookie。我正在使用Chrome浏览器的开发者视图查看cookie是否出现,但它从未出现过

function onLoginUser()
 {
    $app = &JFactory::getApplication();

    // Get Joomla's user object
    $user = &JFactory::getUser();

    if (!$user->guest) 
    {
         setcookie('userinfotocookie-email', $user->email);

         JRequest::setVar('userinfotocookie-id', $user->id, 'cookie');
    }

    return true;
 }
}

注意,我尝试了两种不同的方法来创建cookie,但都不起作用。如果我故意在例程中放入错误代码,我会得到一个错误,因此我知道正在调用该例程。我想我遗漏了一些关于Joomla插件如何工作的信息;有什么建议吗?

我不确定Joomla是什么!您正在使用的版本,但我指的是Joomla!2.5. 我认为您忘记传递正确的参数。尝试重命名您的函数:

公用函数onUserLogin($user$options=array())


我不会在Joomla!中使用setcookie()!。你可以很容易地使用。但除此之外,您的插件究竟应该做什么还不是很清楚。

以下是我的解决方案的总体思路,它不实现cookie。我知道它实际上并没有回答这个问题,但在与Valentin讨论(见评论)并仔细思考后,我意识到Cookie不是一个好的设计选择,而且容易出现很多问题。我决定写一个Joomla内容插件。这将在内容中查找一对{showappwithuser}标记,并将其替换为指向标记对内URL的iframe。例如:

{showappwithuser}http://www.somewebsiteapp.com{/showappwithuser}
这将替换为指向的iframe。这会将信息传递给接受应用程序,然后该应用程序可以对其执行所需的操作。完整的代码如下,但仍然有点笨拙,因为大部分内容都是硬编码的。我需要添加参数处理,以便内容创建者可以选择iframe设置,如宽度、高度、滚动条访问。我还计划集成uid参数的加密,以便在应用程序之间对信息进行一些混淆。这真的可以在很多不同的方向,如果编写正确,可以成为一个很好的插件,将任何非Joomla应用程序无缝集成到Joomla站点。使用此方法向应用程序发送其他参数信息的可能性也是无穷无尽的。享受吧

<?php

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// import the general plugin file of Joomla!'s library
jimport( 'joomla.plugin.plugin' );


// hook into the plugin framework
class plgContentShowAppWithUser extends JPlugin 
{
    // the core code to create an iframe and set it's URL source 
    // with the logged in user name from Joomla
    public function onContentPrepare($context, &$row, &$params, $page = 0)
    {
        $starttriggerpos = strpos($row->text, "{showappwithuser}");
        $iframeurl = "";

        if ($starttriggerpos !== false)
        {
            $endtriggerpos = strpos($row->text, "{/showappwithuser}");
            if ($endtriggerpos !== false)
            {
                $iframeurl = substr($row->text, $starttriggerpos+17, $endtriggerpos-$starttriggerpos-17);

                if (!JFactory::getUser()->guest) 
                {
                    $username = trim(JFactory::getUser()->username);

                    if (strlen($username) > 0)
                    {

                        $row->text = '<iframe src="' . $iframeurl . '?uid=' . $username . '"' . ' frameborder=0 scrolling=auto width=725>This application requires a browser that supports iframes.</iframe>';
                    }
                    else
                    {
                        $row->text = "Your web site login could not be determined. Please correct this and try again.";
                    }
                }
                else
                {
                    $row->text = "You must login to the web site in order to access this content.";
                }
            }
        }
    }
}

我正在阅读我发现的文档,我想这些文档的重点是Joomla 1.5。我不记得在文档中看到过关于参数的任何内容。我正在运行Joomla 1.7。出于这个目的,我想在Joomla内的iframe中运行另一个应用程序,并希望获取登录的用户名,以便在应用程序内进行身份验证。我不想编写组件,因为该应用程序是.Net应用程序。这有帮助吗?我不确定这个插件是否是你所需要的。根据您的简要解释,我将构建一个非常基本的组件来保存iframe。在该组件中,您可以使用JFactory::getUser()获取当前用户,并决定是否显示iframe(可能)。除此之外,乔姆拉!1.5相当古老,与Joomla不同!1.6+系列。还有乔姆拉!1.7不再受支持,并对Joomla进行紧急更新!强烈推荐使用2.5!作为这个项目的一部分,我们可能会升级Joomla,在插件编写方面是否有重大区别?尽管您的方法有道理,但在iFrame中运行的应用程序需要能够读取用户名,以便能够进行内部身份验证。我想,通过在一个应用程序中添加cookie,我可以在另一个应用程序(不是PHP应用程序,而是.Net)中读取值,并提供我所需的跨应用程序通信。我想我可以制作一个组件,当它填充iframe时,也可以在URL参数中传递用户名。饼干似乎是一个更好的选择,但我是开放的,乔姆拉!1.7基本上与2.5兼容。你可以这样做身份验证还取决于你希望你的应用程序有多安全。交换烹饪可能是一个合理的解决方案。看看这个想法:我试过用params,但没用。在这一点上,我必须同意,饼干不是一种方式来这里有很多原因。我将冒险创建一个内容组件,该组件将生成iframe,并将iframe url设置为包含一个带有用户名或id的参数,然后目标应用程序可以随意使用该参数。如果我的结构正确,它应该给我一个插件,允许在iframe中使用正确的参数托管任何应用程序。谢谢你的帮助。