繁体   English   中英

使用Ajax查询进行joomla组件开发

[英]joomla component development with Ajax queries

我有一个用于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组件,但从我可以看到它对我想要做的事情来说是过度杀戮。

还有其他我可以使用的东西吗?

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

要么

您可以在controller.php使用exit()创建新方法,打印信息和url将是index.php?option=com_yourcomponent&task=ajax

通过Joomla平台绝对可以实现这一点。 下面我给你的例子实际上是针对J1.5的,但很容易适应J2.5,并对包含的文件进行一些调整。

  1. 创建一个joomla平台文件,如下所示:
  2. 您的脚本文件
  3. 使用现有的Joomla环境来实现您的功能。

另一个强烈建议是实现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');
    }
?>

您无需创建任何自定义文件并将其添加到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));
        }
    }

...

这只是它如何完成的一个例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM