1

在我的 Joomla 2.5.x 站点上,我想添加链接,打开 Fancybox 窗口,带有邮件表单,用户在其中输入邮件和地址。提交时,插件将验证邮件并将其发送给正确的收件人。

我写了插件,偶然发现了一个问题:如何让 Ajax 调用执行数据库人员和发送邮件的 php 脚本。

如果我使用以下网址:

$.ajax({
    type: 'POST',
    url: ''/my_site/plugins/content/my_plugin/sendmessage.php',
        ...

php 脚本超出了 Joomla 参考,它关闭的原因是:

 defined('_JEXEC') or die();

并且 Joomla 功能不起作用。有解决方法,例如将以下人员添加到 php 脚本中:

<?php
define( '_JEXEC', 1 );

// JPATH_BASE should point to Joomla!'s root directory
define( 'JPATH_BASE', realpath(dirname(__FILE__) .'/' ) );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$user =& JFactory::getUser();
$session =& JFactory::getSession();
?>

但我不确定此解决方法的安全性。我更喜欢干净的解决方案。查了很多,发现正确的方法是创建一个php函数,添加到控制器中,然后从Ajax中调用,方法如下:

    $.ajax({
    type: 'POST',
        url: 'index.php?option=com_mycomponent&format=raw&task=mytask';
         ...

但是这种方式是否仅适用于 Component ?我需要的是一个插件。如何在 Plugin 中运行对 php 函数/脚本的简单 ajax 调用?任何帮助将不胜感激,我正在寻找退出一段时间的解决方案。

4

1 回答 1

1

这已经在 J​​oomla 3.2 中实现,有一个新的 Ajax 功能。如果您需要在之前的版本中使用它,请查看已添加到 3.2 的https://github.com/betweenbrain/Joomla-Ajax-Interface ,您也可以将其安装到 Joomla 2.5+ 并使用它。

于 2013-09-04T21:31:33.460 回答