将AJAX放在Joomla模块中

时间:2012-11-19 00:56:27

标签: ajax joomla joomla-module

我为我的网站制作了一个基本的Joomla模块作为shoutbox。但是我想把AJAX放进去(我知道在JED上已经存在类似的AJAX模块,但这更像是一个让我学习AJAX如何在Joomla模块中工作的项目。)

您重定向到新的php文件的常见AJAX内容显然不起作用,因为该文件不会被定义为

   defined('_JEXEC') or die('Restricted access');

将在新页面中失败。并且将_JEXEC定义为等于一个(正如我在SO上的几个帖子中所读到的那样),就我在Joomla Docs上阅读而言,这是一个安全风险,因为它为网站提供了一个切入点。

我见过other shoutbox module的方法是指向helper.php文件中的一个函数。这对我来说很有意义,因为通常应该存储所有功能。但是我不清楚模块如何在onSubmit()(或相关的)命令上访问helper.php文件,并希望有人可以对此有所了解。

我实际上并不需要任何特定于我的shoutbox模块 - 这更像是如何在Joomla 模块中获得AJAX功能以及如何安排

5 个答案:

答案 0 :(得分:4)

另外两个是在正确的轨道上你需要记住,当你进行AJAX调用时,你无法直接访问Joomla中的php文件。所以最好是调用你的模块。在这种情况下,让模块检查POST或URL中的变量。

我是JQuery的ajax的粉丝,它比构建该shoutbox的人使用的方法更加独立。

$( "#addShout" ).click( function(event, ui) {
                $.ajax({
                    type: 'GET',
                    url: "<?php echo JURI::base() . "index.php?option=mod_mymodule&task=getCustomerJson&selectedCustomer="?>"  + encodeURIComponent(value),
                    success:function(data){
                        $('#shouts').append(data);
                    },
                    error:function(){
                        $('#errors').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
                    }
                });  
        });

然后正如我在对Valentin的评论中提到的那样:

$task = JRequest::getVar('task'); 
if($task == "getCustomerJson"){mySuperHelper::getCustomerJson();}

只有在存在变量时才调用必要的函数。

为了解释部分过程,它有点像这样:

  1. 如果POST或URL中没有变量,它将以Joomla预期的方式显示模块。
  2. 如果检测到变量,则调用方法将其添加到数据库,并将javascript函数添加到显示中。还可以防止正常显示发生。
  3. 您引用的模块非常有趣。主要文件引用的辅助函数执行模型通常在MVC中处理的函数,而Javascript也有点全面。如果你真的想要了解它是如何工作的,你真的需要深入了解fatAjax.js文件,因为它包含所有的AJAX并设置mod_shoutbox.php监听的变量。

答案 1 :(得分:2)

Fron Joomla 3.2如果你需要在Joomla中发出一个AJAX请求!从自定义模块或插件,您可以构建如下URL。

index.php?option=com_ajax&module=your_module_name&method=YourMethodName&format=json

每个参数的说明

<强> 1。 index.php?option = com_ajax :所有请求必须通过com_ajax路由。

<强> 2。 module = your_module_name :第一部分是您正在使用的扩展类型。这可以是“模块”或“插件”。第二部分是扩展名。请注意你不要包含前缀'mod_'或'plg_',只是名称。

第3。 method = YourMethodName :这是您尝试调用的方法名称。如果您在模块中使用它,则该方法必须附加“Ajax”。因此,此处表示的方法将为 YourMethodNameAjax 。如果您在插件上使用此方法,则该方法必须以“onAjax”为前缀。因此,此处表示的方法将为 onAjaxYourMethodName

点击Joomla doc

查看详情

答案 2 :(得分:1)

据我所知,你不能从模块到模块本身(或类似)的函数进行AJAX调用。

您可以构建组件并创建一个视图,该视图将RAW或JSON作为响应返回。因为Joomla!本身将被称为你可以使用Joomla! API&amp;所有的好东西都来自它。这也是一个安全问题,因为如果你需要获取敏感数据,你也可以进行ACL /用户检查。

当您可以从模块调用时:

index.php?option=com_mycomponent&task=getJson

文章Generating JSON output是一个很好的起点。

答案 3 :(得分:0)

jQuery(document).ready(function () { 
    jQuery(".btnshow").click(function () {
        var pagename, pid;
        pid=jQuery(this).attr('rel');
        pagename="<?php echo JURI::root();?>index.php?option=com_componentname&view=result&Id="+pid;    
        jQuery.get(pagename, function (data) {
            jQuery('.para1').html(data);
        });
    }); 
});


<a href="JavaScript:void(0);" rel="<?php echo $id; ?>" title="<?php echo $id; ?>"><img src="<?php echo $image; ?>" alt="" /></a>

答案 4 :(得分:0)

您可以通过以下方式获得所需的结果:

$( "#addShout" ).click( function(event, ui) {
    $.ajax({
        type: 'GET',
        url: "<?php echo JURI::base() . "index.php?option=com_ajax&module=module_name_withot_prefix&method=methodName&anyparams="?>"  + encodeURIComponent(anyparamsvalue) + "&format=json",,
        success:function(data){
            $('#shouts').append(data);
        },
        error:function(){
            $('#errors').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>');
        }
    });  
});

在模块帮助文件中,您需要有一个名为“ methodName”的方法。