【问题标题】:How to add processing PHP file for AJAX requests in Joomla如何在 Joomla 中为 AJAX 请求添加处理 PHP 文件
【发布时间】:2015-09-22 17:10:19
【问题描述】:

我正在尝试在 Joomla 中开发一个表单。基本问题是: 如何根据用户之前选择的内容更改表单选择选项?我需要在用户填写表格时提出几个数据库请求。使用 AJAX,我需要一个处理 PHP 文件。谁能告诉我如何在 Joomla 中执行此操作,因为使用 JCE 文件浏览器我无法添加任何内容。

谢谢!

【问题讨论】:

    标签: php ajax joomla


    【解决方案1】:

    假设您已经知道如何编写一个“普通”的 Joomla 组件,该组件从数据库中检索数据并将其显示在页面中,以下是建议的解决方案。

    在我的示例中,我将动态检索所选“类别”的“产品”列表。

    COMPONENT:Ajax 请求的服务器部分

    假设我们使用 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 无关。

    JQUERY: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 代码应添加到您显示表单的同一页面中。

    【讨论】:

    • 现在,我正在使用 $query = "select * from products"; $result=mysqli:query($conn, $query) or die ("error"); $row=mysqli_fetch_assoc($result); foreach($result as $row) { $products[] = $row['product_name'];我怎样才能用 JSON 做到这一点?您能否将其添加到您的答案中?
    • 简单的答案是:使用 json_encode($products)。但是您刚刚在评论中向我展示的并不是真正的 Joomla 代码。在我回答的开头,我写了“假设您已经知道如何编写一个“正常”的 Joomla 组件”。如果不是这样,不幸的是我的回答有点太复杂,无法应用。
    猜你喜欢
    • 2013-07-13
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多