在Joomla中执行PHP脚本! cms一次 - 基于地理位置的重定向

时间:2010-10-09 19:17:59

标签: php geolocation redirect joomla1.5

您好
我正试图找出在Joomla中执行PHP脚本的最佳方法!
如果用户不是来自X国家(已经拥有数据库和脚本),我想重定向用户 我发现了这个扩展名,但我想制作自己的内容http://bit.ly/daenzU

1)我如何为每位访客执行一次脚本?使用Cookies?
2)因为我将脚本放在Joomla中!模板,我将修改模板/ XXX / index.php
3)基于2),Joomla!每次页面加载时都会加载templates / XXX / index.php,所以我必须避免重定向脚本为用户执行两次

提前感谢您的想法和建议

2 个答案:

答案 0 :(得分:2)

请记住,在Joomla 3.x中,(根据docs),在“登录”之前检查有关用户的信息。事件,您需要在'身份验证'中创建您的插件上下文。也就是说,你需要将你的插件放在root_to_joomla / plugins / authentication / myplugin / myplugin.php'。

另外,你的插件应该是一个名为PlgAuthenticationMyplugin的类,它会扩展基础插件类' JPlugin'并且应该有一个名为' onUserAuthenticate'。

的公共方法
<?php
...
class PlgAuthenticationMyplugin extends JPlugin {
...
    public function onUserAuthenticate($credentials, $options, &$response)
    {
        //your code here (check the users location or whatever)
    }
....

如果您想在Login事件之后执行此操作,则您的插件应位于用户上下文中,位于root_to_joomla / plugins / user / myplugin / myplugin.php。并且应该有一个公共方法&#39; onUserLogin&#39;。

<?php
class PlgUserMyplugin extends JPLugin {
...
    public function onUserLogin($user, $options)
    {
        //your test goes here
    }
...

您可以查看所有其他与用户相关的活动here

答案 1 :(得分:0)

不要修改模板,这样做会有所作为,但不是正确的地方。

我建议您创建一个插件,请参阅Joomla docs on plug-ins。这是event execution order个事件。

创建系统插件并实现onAfterInitialise方法。在该方法中添加所有代码。

为防止每个用户执行两次脚本,请设置用户状态see Joomla documentation for states。您还可以使用会话$session = JFactory::getSession()see documentation

以下是插件的代码....

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

jimport( 'joomla.plugin.plugin' );

class plgMyPlugin extends JPlugin {

    //
    public function __construct(){
        //  your code here
    }

    //
    public function onAfterInitialise(){
        $app = JFactory::getApplication();

        //
        $state = $app->getUserStateFromRequest( "plgMyPlugin.is_processed", 'is_processed', null );
        if (!$state){
            //  your code here
            //  ....

            //  Set the Steate to prevent from execution
            $app->setUserState( "plgMyPlugin.is_processed", 1 );
        }


    }
}