【问题标题】:How to use Joomla plugin inside PHP script outside Joomla Framework如何在 Joomla 框架外的 PHP 脚本中使用 Joomla 插件
【发布时间】:2012-02-22 07:39:06
【问题描述】:

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

我正在以这种方式在该脚本中初始化 Joomla 框架变量:

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 Plugins:

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

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

【问题讨论】:

  • 你为什么将它作为外部(Joomla)脚本运行?
  • 它用于 ajax 响应,如果不作为外部脚本运行 - 我将在 ajax 响应中包含模板垃圾。
  • 您是否正在创建自定义组件?我不确定您使用的是哪个版本的 Joomla,但 1.6+ 有多种支持 ajax 的方式,包括将控制器用于完全不使用模板的“原始”或“json”格式。
  • 我正在使用 jumi 将自定义 php 脚本嵌入到 joomla 文章中。当我使用文章链接调用 ajax 到该脚本时 - 我得到 ajax 响应,其中包括不需要的模板,但不是干净的 ajax 文本或 html。所以我的问题是如何将 Joomla 插件包含到外部 php 脚本中。谢谢。

标签: php joomla


【解决方案1】:

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

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

对于 1.5

1.6+

【讨论】:

  • 谢谢。但是获得清晰的ajax响应的问题现在不是我的问题,它已经使用上面的代码解决了。我的问题是如何将 joomla 插件包含到外部 php 脚本中。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    插件调用如下所示:

    {flashchart data="10,20,15,30|40,50,12,14"}示例图{/flashchart}

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

    我的解决方案是使用插件用于创建我想要的图表的相同代码。我基本上绕过了插件预处理器,做了插件会做的同样的事情....输出必要的代码来创建插件的闪存图表之一。

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

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

    祝你好运。

    【讨论】:

    • 所以您没有使用 joomla 的插件系统,而是使用了与所需插件具有相同结果的单独 php 代码。我说的对吗?
    • 是的,你是对的。我使用 Flexi 自定义代码模块来嵌入我的 PHP。然后在 PHP 中,我访问 FlashChart 插件代码的内容,以构建插件最终创建的相同的 javascript 字符串和 swfobject (Flash) 代码。
    • 是的.. 我想出了相同的解决方法,我放弃了 joomla 插件并使用纯 php 获得了相同的效果(非 joomla 插件与 joomla 插件具有相同的结果)
    • @PaulG 嗨,保罗,我面临的问题与您在闪存图中遇到的问题相同。您能否分享您为解决插件问题所做的代码?在此先感谢!
    【解决方案4】:

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

    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

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多