如何在Joomla框架外的PHP脚本中使用Joomla插件


How to use Joomla plugin inside PHP script outside Joomla Framework

我有一个PHP脚本,它是通过直接访问来执行的(这是为了AJAX输出)。

我正在以这种方式初始化脚本中的Joomla Framework变量:

if ($JEXEC_defined==TRUE) {
    defined('_JEXEC') OR defined('_VALID_MOS') OR die( 'Restricted access' ); //security reason
    $direct_script_access=FALSE;
}
if ($JEXEC_defined==FALSE) {
    define( '_JEXEC', 1 );
    define( 'DS', DIRECTORY_SEPARATOR );
    define('JPATH_BASE', dirname(__FILE__) );
    require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
    $direct_script_access=TRUE;
    // initialize the application 
    $mainframe =& JFactory::getApplication('site');
    $mainframe->initialise();
}

if ($user->username!="") if ($direct_script_access==TRUE) {
    //PHP code when script is accessed directly
}

当直接访问时,作为脚本的输出,我需要显示一个Joomla插件,例如:

{valsimplecalendar SRQCMPDT1 }

但是,我没有显示插件的内容,而是得到了一个平面文本"{valsimplecalendar SRQCMPDT1}"。

我的问题是:当直接调用PHP时,如何初始化插件系统?

编辑

我在网上搜索,发现我需要导入Joomla插件:

JPluginHelper::importPlugin('content');
$dispatcher = &JDispatcher::getInstance();
$dispatcher->trigger('onBeforeDisplayContent', array ( & $category, &$params, $limitstart));

但无论如何,当直接调用PHP脚本时,这并不能显示插件内容。

这可能不是你想要的,但我在使用另一个名为FlashChart插件的Joomla插件时遇到了同样的问题。

插件调用如下所示:

{倒叙图数据="10,20,15,30|40,50,12,14"}样本图{/倒叙图}

所以我想我可以使用PHP插件运行一个PHP脚本,计算数据,然后回显上面的字符串。错误的花括号是由Joomla预处理的,当你运行PHP时,你可以绕过预处理器。

我的解决方案是使用与插件相同的代码来创建我想要的图表。我基本上绕过了插件预处理器,做了与插件相同的事情。。。。这是为了输出必要的代码来创建插件的一个flash图表。

不过我很幸运,因为FlashChart插件非常面向对象,创建图表和输出swfobject代码很容易。

简而言之,你可能需要查看插件代码,看看它在做什么,并在你的PHP代码中做同样的事情。

祝你好运。

根据您的评论,我认为您的问题实际上是"如何在没有Joomla模板HTML的情况下获得AJAX响应"。

在这种情况下,您可能想阅读:

对于1.5

  • 使用MooTools的AJAX

对于1.6+

  • Joomla中的Xml-rpc更改!1.6

  • 自行回答的StackOverflow问题

只需在ajax调用的URL末尾添加:&format=原始

只加载内容,不加载其余内容!

插件事件应该以某种方式触发。通常,它们是在应用程序的路由和调度过程中触发的。您可以使用以下代码手动触发任何插件方法:
JPluginHelper::importPlugin('system'); // Load your plug-in group
$dispatcher = JDispatcher::getInstance(); // USe JEventDispatcher for 3.x
$results = $dispatcher->trigger('onAfterInitialise'); // Trigger your custom event

更多信息:https://docs.joomla.org/Supporting_plugins_in_your_component