您好
我正试图找出在Joomla中执行PHP脚本的最佳方法!
如果用户不是来自X国家(已经拥有数据库和脚本),我想重定向用户
我发现了这个扩展名,但我想制作自己的内容http://bit.ly/daenzU
1)我如何为每位访客执行一次脚本?使用Cookies?
2)因为我将脚本放在Joomla中!模板,我将修改模板/ XXX / index.php
3)基于2),Joomla!每次页面加载时都会加载templates / XXX / index.php,所以我必须避免重定向脚本为用户执行两次
提前感谢您的想法和建议
答案 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 );
}
}
}