如果不在函数内部,PHP代码会抛出错误

时间:2016-03-23 09:57:40

标签: php prestashop

首先,我真的是新的'用PHP。

我正在修改prestashop模块Minic MailChimp,在开发了一些函数后,我试图调用'他们通过AJAX。

这就是我与PHP函数交互的方式......

$('#btn_exec_new_list').on('click', function(){
    id_field = $('#id_field').val();
    name_field = $('#name_field').val();
    list_type = $('#list_type option:selected').val();

    $.ajax({
        type: 'POST',
        url: "minicmailchimp.php", 
        data: {id_field : id_field, name_field : name_field, list_type : list_type, add_list : '1'}, 
        dataType: 'json',
        success: function(result){
            alert(result);
    }});
});

这是在PHP方面,考虑到这一切都在CLASS(MinicMailchimp)中

public function addList(){
    $settings = array();

    if(!empty($_POST['id_field']) || !empty($_POST['name_field']) || $_POST['list_type'] == 0){
        $this->message = array('text' => $this->l('Fill all the fields.'), 'type' => 'error');
        return;
    }

    $settings = array(
        'list_number' => $_POST['list_sendy']+1,
        'id_field'    => $_POST['id_field'],
        'name_field'  => $_POST['name_field'],
        'list_type'   => $_POST['list_type']
    );

    $list_name = "MINIC_MAILCHIMP_LIST".$settings['list_number'];
    Configuration::updateValue($list_name, serialize($settings));
}

这就是我所看到的我必须要调用的方式(这也与上面的函数包含在同一个类中)。问题是我在函数外部编写的任何代码都会引发语法错误。

if(isset($_POST['add_list'])){
    addList();
    $this->addList(); // Not sure which one use (I think it might be this one)
} 

错误:

  

[PrestaShop]模块minicmailchimp中的致命错误:   语法错误,意外'如果' (T_IF),期待功能(T_FUNCTION)

我也尝试将它变成一个函数并在类外调用它,但它只是简单地无法工作,试图通过AJAX抛出并回显并打印它但根本没有答案。它甚至没有成为AJAX的成功部分。

class MinicMailchimp extends Module{
    public function executeFunction(){
        if(isset($_POST['add_list'])){
            echo "response from php";
            addList();
        } 
    }
}
call_user_func("executeFunction");

我得出的结论是,我对课程知之甚少,而且我不能在函数外部编写PHP代码。但这可能是另一回事。

谢谢你,希望这是足够的信息,请记住这是我的第一篇文章。

1 个答案:

答案 0 :(得分:0)

您需要创建一个ajax控制器,并通过ajax调用它。 ajax控制器只会将请求传递给模块的文件。创建文件/minicmailchimp/controllers/front/ajax.php。内容将是这样的:

class MinicMailchimpAjaxModuleFrontController extends ModuleFrontController
{
    public function initContent()
    {
        if (Tools::getIsset('ajax')) {
            die($this->module->ajaxCall());
        }
    }
}

然后在你的minicmailchimp.php文件中创建一个方法“ajaxCall”,然后执行:

public function ajaxCall()
{
    if (Tools::getIsset('add_list')) {
        // Whatever you need to do...
    }
}

然后致电

$.ajax({url: pathToAjaxController, ...})

请记住在ajax请求中传递“ajax”,因此,数据:{ajax:true,...}