2

我有一个用于 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 组件知之甚少,但据我所知,这对于我想做的事情来说太过分了。

还有什么我可以使用的吗?

4

3 回答 3

4

例如,如果您创建一个组件,您可以view为原始查询创建新组件compoments/com_yourcomponent/views/ajax/view.raw.php,并将所有逻辑和输出放在那里 url 将是index.php?option=com_yourcomponent&view=ajax&format=raw

或者

您可以在打印信息和 url 之后创建controller.phpexit()方法index.php?option=com_yourcomponent&task=ajax

于 2012-07-12T22:14:38.260 回答
2

这完全可以通过Joomla 平台实现。我将在下面给您的示例实际上是针对 J1.5,但通过对包含的文件进行一些调整,很容易适应 J2.5。

  1. 创建一个 joomla 平台文件以包含如下所示:
  2. 脚本中包含该文件
  3. 为您的功能使用现在可用的 Joomla 环境。

另一个强烈建议是实现一个 ReSTful API 而不是您的自定义脚本。使用Luracast Restler非常简单。我在大约 10 分钟内启动并运行了它,然后添加了如下所示的 Joomla 框架,并在不到一个小时的时间内为我的网站提供了一个非常灵活的基于 Joomla 的 API,使用 AJAX 调用!就我而言,多年来最好的开发时间。

你的脚本.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');
    }
?>
于 2012-07-12T15:53:06.817 回答
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));
        }
    }

...

这只是如何做到这一点的示例之一。

于 2012-12-17T16:45:01.423 回答