0

Prestashop1.5でAJAX呼び出しを介してコントローラー関数を呼び出そうとしています。それが可能かどうかさえわかりません。これは私がしたことです:追加のメディアをロードし、デフォルトのコントローラーが実行しないいくつかのアクションを実行するために、製品コントローラーをオーバーライドします(override / controllers / front / ProductController.php内)。これは私のコントローラーがどのように見えるかです:

<?php

class ProductController extends ProductControllerCore
{

    public function setMedia() {

        parent::setMedia();

        // Add extra ressources     
        // CSS
        $this->addCSS(...)
        $this->addJS(array(...));

    }

    // Extra methods
    public function renderCart() {
        echo '<h2>HELLO</h2>';
    }


}

これが私の質問です:AJAX呼び出しを介してrenderCart()関数を呼び出すにはどうすればよいですか?それも可能ですか?

ご協力いただきありがとうございます !

4

2 に答える 2

2

renderCart()関数を直接呼び出すことができますが、その代わりに他の方法で呼び出すこともできます。通常、すべてのコントローラーには、いくつかの事前定義された機能があります。

 init() 

and initContent()

一人一人が独自の詳細と目的を持っているので、ここではそれらを説明するつもりはありません。

ここで、コントローラーにinit()という別の関数を作成し、それを使用してrenderCart関数を呼び出すために必要なことです。以下のサンプルコードを確認してください

public function init() 
 {
    parent::init();  //First you have to call the parent init to initialize resources
    if($this->ajax) //special variable to check if the call is ajax
    {
      $this->renderCart(); // call your function here or what ever you wanna do
    }
 }

コードコメントからご理解いただければ幸いです。

注:これはサンプルコードであり、テストされていません。それはあなたにアイデアを与えるためだけのものです

ありがとうございました

于 2013-03-19T06:53:39.053 に答える
0

ajaxリンクを構築する方法のいくつかの例(その後、ajax呼び出しで使用できます):

例1:通常のコントローラーへのリンク(OrderDetailCustomコントローラーを想定):

{$link->getPageLink('order-detail-custom', true)}

//you will then use it like this (note ajax:true):
$.get(ajax_link, {'id_order': id_order, 'ajax': true});

//the controller will then generally have some 
//utility functions based on Tools::getValue('ajax') or
//$this->isXmlHttpRequest(); > a builtin Controller class's function

例2:モジュールのコントローラーへのリンク(SimpleMailerの例のmodileとSendSimpleMailモジュールコントローラーを想定)

{$link->getModuleLink('simplemailer','sendsimplemail',[],true)}

Linkクラスコードでこれらの関数を確認してください。また、この最後の例については、ここでモジュールコントローラーを構築する方法と命名がどのように機能するかを参照してください。

prestashopでモジュールコントローラーへのリンクを生成する方法は?

于 2015-07-09T07:44:18.000 に答える