在我的 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 调用?任何帮助将不胜感激,我正在寻找退出一段时间的解决方案。