2016-03-23 5 views
-1

まずは、PHPで本当に「新」です。PHPコードが関数内になければエラーをスローする

私はPrestashopモジュールMinic MailChimpを変更しています。いくつかの機能を開発した後、私はAJAX経由でそれらを呼び出そうとしました。

これは、これはすべての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)); 
} 

内であり、これはどのように考えると、これはPHP側である...私は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); 
    }}); 
}); 

です私はそれを呼び出さなければならないことを見てきました(これは上記の関数と同じクラスにも含まれています)。関数外に書くコードは構文エラーをスローします。

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

エラー:

[PrestaShop] Fatal error in module minicmailchimp: syntax error, unexpected 'if' (T_IF), expecting function (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

エラーの説明を追加すると便利です。クラスはプロパティと関数の定義のみを保持できますが、クラスの内部ではあるが関数の外にある実行可能なコードを持つことはできません。しかし、あなたはクラスの定義の外からそれを実行することができます。 – syck

+4

あなたはOOPについて何かを学ぶ必要があります。 '$ this'は現在のオブジェクトインスタンスを参照し、' class'の外では意味を持ちません。私たちがここで何を答えているのかはっきりしていませんが、確かにOOPを最初から教えることはできません。 – deceze

+0

呼び出される関数はどこにありますか?クラス内にも?また、質問を編集してエラーを含める必要があります。 – frz3993

答えて

0

ajaxコントローラを作成し、ajax経由で呼び出す必要があります。 Ajaxコントローラはモジュールのファイルにリクエストを送るだけです。 /minicmailchimp/controllers/front/ajax.phpファイルを作成します。 "ajaxCall" 次に、あなたのminicmailchimp.phpファイルにメソッドを作成

、および実行します:内容はこのようなものになるだろう、その後

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

覚え

$.ajax({url: pathToAjaxController, ...}) 
を呼び出しますあなたのajaxリクエストに "ajax"を渡すため、data:{ajax:true、...}

関連する問題