在joomla中编写自定义php脚本

时间:2016-07-28 19:24:39

标签: joomla3.0

我擅长php和javascript。如果我从joomla进行ajax调用,我需要一个指导放置我的自定义php脚本。

我需要从特定文件夹中获取文件名。我可以制作一个与我的PHP代码进行通信的ajax,作为回报,我的php代码会给我特定文件夹的文件。

要放置的php脚本在哪里以及如何路由它。

例如

$.ajax({

url:'....../fetchfiles.php',
success:function(data){

}

})

希望我很清楚。

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,我的答案就是您可以将fetchfiles.php放在任何您想要的地方,前提是您在$ .ajax调用中放置了正确的路径。

然后在fetches.php中,你应该在启动代码之前调用Joomla框架,如下所示:

// no direct access 
define( '_JEXEC', 1 );

// get joomla root
$jpath_root = $_POST['jpath_root'];

//load Joomla
define( 'JPATH_BASE', $jpath_root );
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );

jimport( 'joomla.application.application' );
jimport( 'joomla.filter.filteroutput' );

$japp = JFactory::getApplication('site');

/* now you are good to go with your code */

关于

的几句话
// get joomla root
$jpath_root = $_POST['jpath_root'];

一部分。

我的经验是,如果你通过$ .ajax传递JPATH_ROOT变量是最好的(一种方法是将隐藏的输入值设置为' JPATH_ROOT'在你的joomla文件中,你调用ajax然后在你的ajax.js中选择该值并传递给你的案例中的ajax.php或fetches.php)

您也可以用另一种方式定义JPATH_BASE,例如

define( 'JPATH_BASE', realpath(dirname(__FILE__)));

define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..' ));

取决于您的实际文件结构,但请注意,这样您实际上重新定义了原始JPATH_BASE常量,并且如果您稍后在代码中调用某些可能取决于原始Joomla的第三方组件函数/类,则可能会导致冲突定义常数......

我已经用ZOO组件和我的ajax调用了解它......:)

希望这有一定道理。

答案 1 :(得分:0)

根据您要显示结果的位置,您可以创建组件或模块(您也可以轻松地将文件包含在文章中以在组件位置打印结果)。

在模块的情况下: https://docs.joomla.org/J3.x:Creating_a_simple_module/Developing_a_Basic_Module 显然你的ajax调用将在tmpl/default.php和你的php脚本在模块文件夹中,只需将它包含在mod_helloworld.xml的文件列表中。然后压缩文件夹并使用Module Manager进行安装。

如果您的jquery代码出现问题,则必须使用noConflict()模式。