【问题标题】:Fatal error: Uncaught Error: Class 'Db' not found in prestashop致命错误:未捕获的错误:在 prestashop 中找不到类“Db”
【发布时间】:2017-12-24 11:16:21
【问题描述】:

对不起我的英语。

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

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

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

-/controllers/front/products.php(本模块的控制器)
-/views/templates/front/products.tpl(我的控制器的模板)
- 还有/controllers/front/take_product.php(将由products.tplajax 调用)。

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

` 功能打印产品 (id_product) { var form_data = new FormData(); form_data.append('id_product', id_product); 采取(功能(rezultat){ $("#product_div").html(rezultat); }); 函数采取(rezultat){ $.ajax({ 网址:“http://127.0.0.1/prestashop/modules/module3/controllers/front/take_product.php”, 数据类型:'文本', 缓存:假, 内容类型:假, 处理数据:假, 数据:form_data, 类型:'发布', }).done(函数(输出){ rezultat(输出); }); } }`

我的/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); 回显$结果; `

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

` 致命错误:未捕获错误:

/var/www/html/prestashop/modules/module3/controllers/front/take_product.php:6
中找不到类“Db”:堆栈跟踪:#0 { main} 抛出
/var/www/html/prestashop/modules/module3/controllers/front/take_product.php
第 6 行 `

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

` @ini_set('display_errors', 'on'); 类 Module3take_productsModuleFrontController 扩展 模块前端控制器 { 公共函数 initContent() { 父::initContent(); $sql = 'SELECT * FROM ps_product WHERE id_product="'.(int)$_POST["id_product"].'"'; $result = Db::getInstance()->execute($sql); 回显$结果; } } `

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

` 致命错误:

/var/www/html/prestashop/modules/module3/controllers/front/take_product.php
第 6 行中找不到类“ModuleFrontController” `

那么...你有什么想法吗?

【问题讨论】:

    标签: php ajax module controller prestashop


    【解决方案1】:

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

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

    这样,它将有正确的 url 来加载 Prestashop 并使用模块控制器。

    只是提醒另一个解决方案,但不是那么正确。您不需要它来扩展 ModuleFrontController(正如您之前尝试过的那样),只需在文件开头使用“加载”prestashop:

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

    cron_currency_rates.php 使用它而不是控制器。但是,同样,这不是最好的方法。只是想指出区别。

    【讨论】:

    • 我在“{$link->getModuleLink('Module3', 'take_product', [], true)}”中修改了 url(来自 products.tpl)并让控制器(take_product .php) 怎么样。但是现在我在控制台中出现另一个错误:POST [lonk](127.0.0.1/prestashop/…404) (Not Found)
    • 将您的控制器名称更改为 Module3Take_productModuleFrontController,(您的班级中有复数)。并删除缓存/class_index.php
    • 我把你的网址和我让 take_product.php 作为类控制器。不,错误与我的介绍相同:致命错误:第 5 行的 /var/www/html/prestashop/modules/module3/controllers/front/take_product.php 中找不到 Class 'ModuleFrontController'
    • 我的课是这样开始的:class Module3take_productModuleFrontController extends ModuleFrontController
    • 配置文件夹不是设置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2018-09-06
    • 2018-05-11
    • 2020-11-09
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多