我正在尝试在Joomla中开发一个表单。基本问题是: 如何根据用户之前选择的内容更改表单选择选项?当用户填写表单时,我需要发出几个数据库请求。使用AJAX,我需要一个处理PHP文件。有人可以告诉我如何在Joomla中执行此操作,因为使用JCE文件浏览器我无法添加任何内容。
谢谢!
答案 0 :(得分:1)
假设你已经知道如何写一个"正常" 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
P.S。关于如何实施检查的更详细的讨论是偏离主题的,因为它与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代码应添加到您显示表单的同一页面中。