我有一个名为' MyMenu'的PrestaShop模块。我想通过AJAX调用调用此菜单。
我的模块显示在public function hookFooter()
{
$display = $this->display(__FILE__, 'megamenu.tpl', $smartyCacheId);
Tools::restoreCacheSettings();
return $display;
}
方法中:
<div class="load_menu"></div>
<script>
$(document).ready(function (e) {
$.ajax({
method: "POST",
url: "../modules/MyMenu.php",
data: {},
success: function (data) {
$('.load_menu').html(data);
}
})
});
</script>
我想用这个脚本显示:
dockerTemplate {
mavenTemplate(label: 'maven-and-docker') {
node('maven-and-docker') {
container(name: 'maven') {
sh 'mvn clean package fabric8:build fabric8:push'
}
}
}
}
答案 0 :(得分:3)
最好的方法是通过链接到模块的前控制器来完成。 你可以这样调用网址:
$link->getModuleLink('modulename','controller', $parameters);
// Parameters is an optionnal array, it can be empty
对于控制器,请将类似这样的文件放在./modules/modulename/controllers/front/ajax.php这样的内容中:
class ModuleNameAjaxModuleFrontController extends ModuleFrontController
{
public function initContent()
{
$response = array('status' => false);
require_once _PS_MODULE_DIR_.'modulename/modulename.php';
$module = new ModuleName;
if (Tools::isSubmit('action')) {
$context = Context::getContext();
$cart = $context->cart;
switch (Tools::getValue('action')) {
case 'actionname':
$response = array('status' => true);
break;
default:
break;
}
}
// Classic json response
$json = Tools::jsonEncode($response);
$this->ajaxDie($json);
// For displaying like any other use this method to assign and display your template placed in modules/modulename/views/template/front/...
// $this->context->smarty->assign(array('var1'=>'value1'));
// $this->setTemplate('template.tpl');
// For sending a template in ajax use this method
// $this->context->smarty->fetch('template.tpl');
}
}
答案 1 :(得分:0)
如果您不想通过模块传递网址,则js代码段应该是这样的。
$(document).ready(function(){
$.ajax({
type: "POST",
headers: { "cache-control": "no-cache" },
url : baseDir + 'modules/yourmodulename/yourfile.php',
data: {
token : token
},
success : function(data){
$('.load-menu').html(data)
}
});
});
其中yourmodulename
是模块的名称,yourfile.php
是检索菜单的代码。
不要忘记向您的数据添加令牌,这是为了防止CSFR攻击,显然您还必须检查服务器端脚本中的令牌。
答案 2 :(得分:-2)
在模块根目录下的新文件中,您可以创建文件“ajax.php”
require_once(MODULE_DIR.'MyMenu/mymenu.php');
if(Tools::getValue('token') !=
$mymenu = Module::getInstanceByName('mymenu');
$menu = $mymenu->hookFooter();
die($menu);
在你的js中,在模块的根目录
<script>
$(document).ready(function (e) {
$.ajax({
method: "POST",
url: "./ajax.php",
data: {},
success: function (data) {
$('.load_menu').html(data);
}
})
});
</script>