【发布时间】:2015-09-22 17:10:19
【问题描述】:
我正在尝试在 Joomla 中开发一个表单。基本问题是: 如何根据用户之前选择的内容更改表单选择选项?我需要在用户填写表格时提出几个数据库请求。使用 AJAX,我需要一个处理 PHP 文件。谁能告诉我如何在 Joomla 中执行此操作,因为使用 JCE 文件浏览器我无法添加任何内容。
谢谢!
【问题讨论】:
我正在尝试在 Joomla 中开发一个表单。基本问题是: 如何根据用户之前选择的内容更改表单选择选项?我需要在用户填写表格时提出几个数据库请求。使用 AJAX,我需要一个处理 PHP 文件。谁能告诉我如何在 Joomla 中执行此操作,因为使用 JCE 文件浏览器我无法添加任何内容。
谢谢!
【问题讨论】:
假设您已经知道如何编写一个“普通”的 Joomla 组件,该组件从数据库中检索数据并将其显示在页面中,以下是建议的解决方案。
在我的示例中,我将动态检索所选“类别”的“产品”列表。
假设我们使用 JSON 在 Ajax 调用中交换数据。
在每个 Joomla 组件中,您可以创建一个 JSON 视图,在默认的 view.html.php 旁边创建一个文件 view.json.php。当您将“format=json”添加到查询字符串时,将使用该视图。
因此,您创建了这些额外的视图,它们使用相同的模型来获取数据,但将它们作为 JSON 字符串输出。 JSON 视图通常非常简单,如下所示:
public function display()
{
$this->products = $this->getModel()->getProducts();
echo json_encode($this->products);
}
您还需要添加“tmpl=component”,以便响应仅包含来自组件的数据,而不包含 Joomla 页面的其余部分(如模块等)。
您最终应该处于可以放入浏览器的情况:
http://yoursite/index.php?option=mycomponent&view=products&format=json&tmpl=component
您将获得一个 JSON 产品列表。
当然,您只需要所选类别的产品,因此您应该修改“getProducts”模型方法以检查查询字符串参数,例如category=xyz。
网址变成
http://yoursite/index.php?option=mycomponent&view=products&category=1&format=json&tmpl=component
附:关于如何实现检查的更详细讨论不在主题范围内,因为它与 AJAX 无关。
现在您有了一个通过 URL 接受请求并提供 JSON 响应的组件,您可以在每次“类别”选择更改时使用 jQuery 获取新数据:
var category_select = $('#category');
var product_select = $('#product');
var request = jQuery.ajax({
"url": 'index.php?option=mycomponents&view=products&tmpl=component&format=json&category=' + category_select.val()
"type": "GET"
}).done(function (result) {
result.each(function (product) {
var new_option = jQuery('<option/>', {
'value': product.id,
})
.text(product.name)
.appendTo(product_select);
});
})
此 JS 代码应添加到您显示表单的同一页面中。
【讨论】: