致命错误:未捕获错误:在prestashop

时间:2017-07-19 09:21:03

标签: php ajax module controller prestashop

抱歉我的英文。

我是prestashop的初学者,我仍在努力了解更多信息。

我在/ modules目录中创建了一个模块(/module3)。这有下一个文件:

- module3.php(此模块的主要php文件)
- /views/templates/hook/module3.tplmodule3.php的模板)

- /controllers/front/products.php(本模块的控制者)
- /views/templates/front/products.tpl(我的控制器的模板)
- 以及/controllers/front/take_product.phpproducts.tpl将由ajax调用。)

我的/views/templates/front/products.tpl有下一个ajax:

`   function print_product (id_product) {
        var form_data = new FormData();
        form_data.append('id_product', id_product);

        take(function(rezultat) {
            $("#product_div").html(rezultat);
        });

        function take(rezultat) {
            $.ajax({
                url: "http://127.0.0.1/prestashop/modules/module3/controllers/front/take_product.php",
                dataType: 'text',
                cache: false,
                contentType: false,
                processData: false,
                data: form_data,                         
                type: 'post',
            }).done(function(output) {
                rezultat(output);
            });
        }
    }`

我的/controllers/front/take_product.php有下一个代码:

`
    @ini_set('display_errors', 'on');

    $sql = 'SELECT * FROM ps_product WHERE id_product="'.(int)$_POST["id_product"].'"';
    $result = Db::getInstance()->execute($sql);
    echo $result;
`

这就是/views/templates/front/products.tpl收到并打印的内容:

`
Fatal error: Uncaught Error:
Class 'Db' not found in
/var/www/html/prestashop/modules/module3/controllers/front/take_product.php:6
Stack trace: #0 {main} thrown in
/var/www/html/prestashop/modules/module3/controllers/front/take_product.php
on line 6 `

也许您认为我需要/controllers/front/take_product.php中的类控制器。
这就是为什么我也用下一个代码改变了/controllers/front/take_product.php

`
    @ini_set('display_errors', 'on');

    class Module3take_productsModuleFrontController extends 
    ModuleFrontController
    {
        public function initContent()
        {
            parent::initContent();

            $sql = 'SELECT * FROM ps_product WHERE id_product="'.(int)$_POST["id_product"].'"';
            $result = Db::getInstance()->execute($sql);
            echo $result;
        }
    }
`

但现在/views/templates/front/products.tpl收到并打印了另一个错误:

`
Fatal error: 
Class 'ModuleFrontController' not found in
/var/www/html/prestashop/modules/module3/controllers/front/take_product.php
on line 6 `

所以......你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您正试图直接在您的ajax中访问take_product.php。 不要对网址进行硬编码,而是使用tpl中的链接对象:

url: "{$link->getModuleLink('Module3', 'take_products', [], true)|escape:'html':'UTF-8'}",

这样,它将有正确的url来加载Prestashop并使用modulecontroller。

只是提醒另一种解决方案,但不是那么正确。你不需要它来扩展ModuleFrontController(正如你之前尝试过的那样),只是为了#34;加载" prestashop在文件的开头使用:

require_once(dirname(__FILE__) .'/../../../../config/config.inc.php'); 

cron_currency_rates.php使用它而不是控制器。但是,再次,这不是最好的方式。只是想指出差异。