我有一个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