使用ajax调用prestashop模块

时间:2017-03-21 11:11:29

标签: ajax module prestashop prestashop-1.7

我有一个名为' 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'
             }            
        }
    }
}

3 个答案:

答案 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>