抱歉我的英文。
我是prestashop
的初学者,我仍在努力了解更多信息。
/module3
)。这有下一个文件: - module3.php
(此模块的主要php文件)
- /views/templates/hook/module3.tpl
(module3.php
的模板)
- /controllers/front/products.php
(本模块的控制者)
- /views/templates/front/products.tpl
(我的控制器的模板)
- 以及/controllers/front/take_product.php
(products.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 `
答案 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使用它而不是控制器。但是,再次,这不是最好的方式。只是想指出差异。