如何在Joomla Framework之外的PHP脚本中使用Joomla插件

时间:2012-01-30 14:07:00

标签: php joomla

我有一个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脚本时无法显示插件内容。

4 个答案:

答案 0 :(得分:1)

这可能不是你想要的,但我和另一个名为FlashChart Plugin的Joomla插件有同样的问题。

插件调用如下所示:

{flashchart data =“10,20,15,30 | 40,50,12,14”} Samplechart {/ flashchart}

所以我认为我可以使用PHP插件运行PHP脚本,计算数据并回显出上面的字符串。错误!大括号是由Joomla预处理的,当你运行PHP时,你绕过了预处理器。

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

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

简而言之,您可能需要查看插件代码,看看它在做什么,并在PHP代码中执行相同的操作。

祝你好运。

答案 1 :(得分:0)

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

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

1.5

适用于1.6 +

答案 2 :(得分:0)

只需在您的网址末尾添加ajax调用:& format = raw

只有在没有其他内容的情况下才能加载内容!

答案 3 :(得分:0)

应以某种方式触发插件事件。通常在路由和调度应用程序期间触发它们。您可以使用以下代码手动触发任何插件方法:

include('../blog/wp-load.php'); // Blog path

// Get the last 4 posts
  $recent_posts = wp_get_recent_posts(array(
  'numberposts' => 4,
  'category' => 0,
  'orderby' => 'post_date',
  'post_type' => 'post',
  'post_status' => 'publish'
));

// Display them as list
echo '<ul>';
foreach($recent_posts as $post) {
  echo '<li><a href="', get_permalink($post['ID']), '">', $post['post_title'], '</a></li>';
}
echo '</ul>'`

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