Php Joomla 2.5模态弹出组件窗体

Php Joomla 2.5模态弹出组件窗体,php,javascript,ajax,joomla,mootools,Php,Javascript,Ajax,Joomla,Mootools,我正试图修改Joomla组件,以实现一些ajax功能,从而使我的网站用户能够更精简一些。我已经更改了下面的信息以保持项目的匿名性,因为我有妄想症:-) 我想实现的目标在我的脑海中很简单: ->用户登陆xyz组件中的“订单”页面 ->如果订单页面上没有此用户的配送地址,请提供一个链接以创建一个配送地址 ->当用户单击“添加地址”时,会出现一个模式窗口,并向“添加地址”页面发出ajax请求,该页面具有添加地址的表单 ->Modal不显示整个页面,而只显示表单和基本(必需)表单字段 ->用户输入地址信

我正试图修改Joomla组件,以实现一些ajax功能,从而使我的网站用户能够更精简一些。我已经更改了下面的信息以保持项目的匿名性,因为我有妄想症:-)

我想实现的目标在我的脑海中很简单:

->用户登陆xyz组件中的“订单”页面

->如果订单页面上没有此用户的配送地址,请提供一个链接以创建一个配送地址

->当用户单击“添加地址”时,会出现一个模式窗口,并向“添加地址”页面发出ajax请求,该页面具有添加地址的表单

->Modal不显示整个页面,而只显示表单和基本(必需)表单字段

->用户输入地址信息并单击按钮提交表单

->这些字段经过验证后发布

->模式关闭

->在原始“订单”页面上具有交货地址的字段将被刷新,现在包括新地址。这不应刷新整个页面,因为用户可能已将数据放入其他表单元素中。这很重要

好的,现在你知道我想要实现什么,让我向你介绍我目前拥有的

->用户登陆xyz组件中的“订单”页面

->如果订单页面上没有此用户的配送地址,请提供一个链接以创建一个配送地址

我已经编写了一个简单的php if语句,该语句创建了一个锚链接,其中包含文本“AddaAddress”和id“addNewAddress”

->当用户单击“添加地址”时,会出现一个模式窗口,并向“添加地址”页面发出ajax请求,该页面具有添加地址的表单

我正在使用一个名为
SimpleModal
from的mootols插件

->Modal不显示整个页面,而只显示表单和基本(必需)表单字段

我已经扩展了模式的功能,允许我插入一些mootools过滤,因为我只想显示表单,而不想显示其他内容。我已经添加了这个参数,作为一个名为
getSomething
的新参数,如果需要,我可以注入它

//SIMPLEMODAL
$("addNewAddress").addEvent("click", function(){
  var SM = new SimpleModal({"width":600});
      SM.addButton("Action button", "btn primary", function(){
          $('addressForm').submit();
          this.hide();
      });
      SM.addButton("Cancel", "btn");
      SM.show({
        "model":"modal-ajax",
        "title":"New address",
        "param":{
          "url":"index.php?option=com_address&modal=true",
          "getSomething":"#addressForm",
          "onRequestComplete": function(){}
        }
      });
});
这就是它调用的函数:

else if (param.getSomething.match(elid))
        {

            // Request HTML
            this.request = new Request.HTML({
                evalScripts:false,
                url: param.url,
                method: 'get',
                onRequest: function(){},
                onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript){
                    var f = responseElements.filter(param.getSomething);
                    $('simple-modal').removeClass("loading");
                    $('simple-modal').getElement(".contents").adopt(f);
                    param.onRequestComplete();

                    // Execute script page loaded
                    eval(responseJavaScript)

                    // Resize
                    this._display();

                    // Add Esc Behaviour
                    this._addEscBehaviour();
                }.bind(this),
                onFailure: function(){
                    $('simple-modal').removeClass("loading");
                    $('simple-modal').getElement(".contents").set("html", "loading failed")
                }
            }).send();
        }
*现在,到目前为止,我已经成功地完成了所有工作,但我无法理解下一部分*

->用户输入地址信息并单击按钮提交表单

在ajax请求url的末尾,您可能会注意到我发送了modal=true请求,这样我就可以隐藏表单上不需要在模态窗口中显示的某些元素—当从模态窗口调用表单时,表单自己的提交按钮是隐藏的

->这些字段经过验证后发布

如果我调用没有模式的“addaddress”页面,那么表单有自己的验证。但是,使用模式,当我单击submit时,不会进行任何验证,并且添加地址时不会进行任何验证。我需要使用模式本身中的独立验证对字段进行一些验证

->模式关闭

目前,当表单发布时,我会被重定向到“
viewaddresses
”页面,但我相信我可以自己解决这个问题。相反,我只想关闭模态

->在原始“订单”页面上具有交货地址的字段将被刷新,现在包括新地址。这不应刷新整个页面,因为用户可能已将数据放入其他表单元素中。这很重要

这是不言自明的,但我甚至不知道从哪里开始

我想我已经尽可能清楚了,但是如果你还需要什么,请告诉我


我非常感谢您提供的任何帮助。

您可能缺少的是如何触发表单提交

  • 您可以使用以下选项提交表单:
    $('myForm')。fireEvent('submit')
因此,使用您的示例,我将其中一个模式按钮的代码更改为:

SM.addButton("Submit button", "btn primary", function () {
    $('addressForm').fireEvent('submit');
});
在Mootools Form.Validator中,您可以捕获事件。说明:

formValidate-(函数)在表单验证完成时执行的回调;此函数传递三个参数:布尔值(如果表单通过验证,则为true);形式元素;和onsubmit事件对象(如果有)(否则,未定义传递)

我不确定当以编程方式启动submit时为什么不提交表单,但无论如何,您可以在此函数中添加一个新的
.submit()
,用于检查验证器布尔结果

因此您可以这样做:

new Form.Validator.Inline(myForm, {
    onFormValidate: function (bool, element) {
        if (bool) {
            element.submit();
        }
    }

演示一个链接或一把小提琴会更容易理解你的页面/行为。顺便问一下,您使用的表单验证是什么?mootools formcheck?也许它不适合您的用例,但是您不能从模式表单中分配主表单的字段,让主表单处理验证吗?Riccardo,我不确定这将如何实现。这对于用户来说非常重要,所以我不介意在后台做一些肮脏的工作。只是出于兴趣,有人知道我如何使用@Sergio在SimpleModel中验证表单吗组件正在使用mootools验证,但我不必坚持使用它。我目前正在查看formcheck,但我不知道如何使用它在模式窗口中验证表单。谢谢你的意见,Rich@Rich,对我来说有点不清楚你需要什么,你能说出这个例子中缺少什么吗:谢谢你再次为我看这个。代码按照我的意愿工作,但它阻塞了我的表单。如果我的表单使用fire事件方法,则会触发验证,但表单不会提交。如果我使用$('addressForm')。submit();表单已提交,但没有验证。这是在我的形式的头部-一切似乎都好吧@里奇,你有几张表格?在你的问题中,你指的是地址表,现在你指的是