【问题标题】:Joomla handling multiple ajax forms on the same pageJoomla 在同一页面上处理多个 ajax 表单
【发布时间】:2011-08-30 08:34:59
【问题描述】:

我正在使用 Joomla 开发带有 AJAX 的用户配置文件管理组件。

目标是允许用户编辑自己的用户信息。有很多信息,所以我决定制作“子表单”或部分,而不是一个庞大的表单。为了让整个事情变得用户友好,我想发送表单并使用 AJAX 刷新用户信息。

这是一个例子:

有两个部分,“基本用户信息”显示人的名字、姓氏和年龄,“扩展用户信息”显示人的职业、公司和技能。每个部分都有一个“编辑”链接(或按钮),它将内容转换为表单 (AJAX),允许用户修改呈现的信息。您一次只能编辑一个部分的信息。当用户完成修改数据后,他发送带有“发送”链接(或按钮)的表单,该部分返回简单地显示该部分的信息(以及刚刚进行的更新)。

所以我需要知道开发这样一个组件的最有效方法是什么。我想到了两种方法:

1)在主组件的“tmpl”目录下我们查看以下文件:

  • default_basic.php(显示用户基本信息),
  • default_basic_edit.php(显示允许用户编辑基本信息的表单)
  • default_extended.php(显示扩展用户信息),
  • default_extended_edit.php(显示允许用户编辑扩展信息的表单)
  • default.php(加载每个显示子模板并调用JView::loadTemplate($subtemplate)

当用户点击一个编辑链接时,一个 AJAX 调用是对以下 URI index.php?option=com_userinfo&view=userinfo&subview=basic_edit&format=ajax,这导致视图类在分配用户信息后调用$this->loadTemplate('basic_edit')。 如果用户单击取消,则使用相同的过程再次加载“基本”模板。如果用户修改信息并单击发送链接,则发送表单,然后加载“基本”模板。

2) “tmpl”目录下只有一个“default.php”文件,保存着各节的编辑版本和显示版本。但是所有的编辑版本一开始都是隐藏的。当用户点击编辑链接时,该部分的显示版本将被隐藏并显示编辑版本(使用 display:none 和 display:block)。然后,如果用户单击取消按钮,我们会做相反的事情。如果用户点击发送按钮,我们会发送一个 AJAX 请求来更新数据库中的数据并返回更新后的用户信息,这些信息将被加载到该部分的显示版本中。最后,我们将该部分的编辑版本替换为其显示版本。

我知道有很多文本,但最终它归结为在使用 AJAX 刷新完整的 HTML 块之间进行选择,或者只是发送更新的信息并修改隐藏块的内容然后让它们出现。那么,知道我们处于 Joomla 1.5 环境中,您认为最合乎逻辑的方法是什么?你将如何进行? (也许还有其他方法可以创建这样的组件?)

(我尝试了两种方法,但我无法完全使其工作,所以我决定询问是否是概念问题......)

感谢您花时间阅读所有文字。

【问题讨论】:

    标签: ajax forms joomla


    【解决方案1】:

    我的回答是:如果没有它可以完成,为什么还要刷新部分?

    例如,当我们谈论文本字段和检查/单选按钮等基本表单元素时,我更喜欢以下内容:在成功保存/发送时,只需显示一条好消息,如“已保存配置文件”几秒钟,用户确保更改已保存且正常。

    如果我错过了什么,请告诉我。

    【讨论】:

    • 我对问题的描述可能不清楚。事实上,当页面第一次加载时,它不显示表单元素,只显示 HTML 格式的用户信息。然后,当用户单击编辑按钮时,会出现一个允许他编辑信息的表单。当用户完成编辑后,我需要让表单消失以仅显示更新的信息。
    • 事实上,我只是想重现类似 stackoverflow.com 的“编辑评论”功能(还有更多信息要编辑)。显示您的评论。如果要修改它,请单击编辑按钮,然后会出现一个表单。您可以单击“取消”关闭表单,或在完成编辑后单击“保存”。如果您点击“保存”,您的更新评论将会显示。
    • 大部分这些都可以在浏览器中使用 JavaScript 完成。例如,您可以在单击“编辑”(使用 DOM 操作)时动态创建一个文本字段,然后简单地复制数据以进行编辑。单击“保存”时,数据被传输到服务器,显示成功消息并且 GUI 恢复为不可编辑的视图(再次使用 DOM 操作)。这将最大限度地减少所涉及的负载。很确定 stackoverflow.com 上的这个表单就是这样工作的 ;-)
    • 在这种情况下,我在原始消息中解释的第二种解决方案似乎也足够了,因为已经创建了表单元素。因为会有很多表单元素,我猜用 javascript 创建它们可能不是最佳的......
    • 是的,我同意。如果我们谈论很多表单元素,最好提前创建它们。
    【解决方案2】:

    我已经尝试了这两种解决方案,而 #2 是唯一对我有用的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      相关资源
      最近更新 更多