我有一个用于AJAX查询的PHP脚本,但我希望它们能够在Joomla(2.5)框架的保护下运行,这样我就可以使用会话ID,用户ID等。
例如:
$(function () {
$.ajax({
url: 'ajax.php', //the script to call to get data
dataType: 'json' //data format
...
});
});
其中ajax.php的代码如下:
$user =& JFactory::getUser();
根据我的理解,最好将AJAX / JSON调用到标准的Joomla组件。我对开发一个MVC组件了解不多,但从我所看到的情况来看,这对我想做的事情来说太过分了。
我还可以使用其他东西吗?
答案 0 :(得分:4)
如果您创建了一个组件,则可以为原始查询创建新的view
,例如compoments/com_yourcomponent/views/ajax/view.raw.php
,并将所有逻辑和输出放在那里
网址为index.php?option=com_yourcomponent&view=ajax&format=raw
或
您可以在controller.php
之后使用exit()
创建新方法,打印信息和网址将为index.php?option=com_yourcomponent&task=ajax
答案 1 :(得分:2)
这绝对有可能通过Joomla Platform。我将在下面给出的示例实际上是针对J1.5,但很容易适应J2.5,并对包含的文件进行一些调整。
另一个强大建议是实施ReSTful API而不是自定义脚本。使用Luracast Restler非常简单。我在大约10分钟内完成并运行,然后添加了如下所示的Joomla Framework,并在一小时内使用AJAX调用为我的网站提供了一个极其灵活的基于Joomla的API!就我而言,花在年的最佳开发时间。
<强> yourscript.php 强>
require_once('joomla_platform.php');
/* Get some of the available Joomla stuff */
$config = new JConfig();
$db = &JFactory::getDBO();
$user =& JFactory::getUser();
if($user->gid <25) {
die ("YOU CANT BE HERE");
}
echo "<pre>".print_r($config,true)."</pre>";
<强> joomla_platform.php 强>
<?php
/* Initialize Joomla framework */
if (!defined('_JEXEC')) {
define( '_JEXEC', 1 );
// define('JPATH_BASE', dirname(__FILE__) );
define ('JPATH_BASE', "c:\\wamp\\www");
define( 'DS', DIRECTORY_SEPARATOR );
/* Required Files */
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
/* To use Joomla's Database Class */
require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );
require_once ( JPATH_LIBRARIES.DS.'joomla'.DS.'import.php'); // Joomla library imports.
/* Create the Application */
global $mainframe;
$mainframe =& JFactory::getApplication('site');
}
?>
答案 2 :(得分:2)
您无需创建任何自定义文件并将其添加到Joomla脚本中。您只需要一个控制器来提供ajax请求。你甚至不需要一种观点(单向)。
你的ajax电话应该是这样的:
$(function () {
$.ajax({
url: 'index.php?option=com_<component_name>&no_html=1task=<controller_name>.<controller_action>', //not_html = 1 is important since joomla always renders it's default layout with menus and everything else, but we want the raw json output
dataType: 'json' //data format
...
});
});
你的控制器:
/*
* @file admin/controller/<controller_name>.php
*/
class <component_name>Controller<controller_name> extends JController
{
public function <controller_action>()
{
//do something
$respnse['message'] = 'Your message for the view';
die(json_encode($reponse));
}
}
...
这只是其中一个例子。