2017-06-24 38 views
0

こんにちは、そこに親愛なる開発者。カスタムバックオフィスモジュールのプロダクトキーのリストに「Mail」という名前のカスタムAddRowActionを作成しました。このアクションフックの内容がトリガされないことを除いてほとんど動作します。テストのために、私はそれが動作するかどうかをテストするためのデフォルトのmail()関数を入れます。しかし、私のprocessMail()ではうまくいきません。ボタンをエクスポートに変更するとメールが機能します。Prestashop V1.6 - 私のRowAction "mail"は動作しません。

この私が作った今日:

マイバックオフィスコントローラ:FINE WORKS

class AdminAvantokeyLogController extends ModuleAdminController 
{ 

    public function __construct() 
    { 
     $this->bootstrap = true; 
     $this->table = 'avanto_log'; 
     $this->className = "AvantoLog"; 
     $this->_defaultOrderBy = 'id_avanto_log'; 

     $this->addRowAction('edit'); 
     $this->addRowAction('delete'); 
     $this->addRowAction('mail'); //this is my custom button 


     $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 
      'confirm' => $this->l('Delete selected items?')),); 

     $this->fields_list = array(
      'id_avanto_log' => array(
       'title' => $this->l('Key ID'), 
       'width' => 20, 
      ), 
      'serial_key' => array(
       'title' => $this->l('Serial Keys'), 
       'width' => 200, 
      ), 
      'product_name' => array(
       'title' => $this->l('Product Name'), 
       'width' => 50, 
      ), 

     ); 

     parent::__construct(); 
    } 

これは、同じコントローラでdisplayMaillink方法:FINE WORKS

public function displayMailLink($token, $id) 
{ 
    $this->context->smarty->assign(
     array(
      'href' => self::$currentIndex.'&token='.$this->token.'&'.$this->identifier.'='.$id.'&mail'.$this->table.'=1', 
      'action' => $this->l('Mail') 
     ) 
    ); 
    $content = $this->context->smarty->fetch(_PS_MODULE_DIR_ . "avanto_key/views/templates/admin/list_action_test.tpl"); 
    return $content; 
} 

このprocessMail()メソッドは、メールバットをクリックしてもトリガされませんon:

public function processMail() 
{ 
    mail("[email protected]" , "test message from export" , "this is my message content"); 
} 

誰かが私を正しい方向に向けることができますか?私は、Admincontrollerとexportcontrollerのビルドからメソッドをコピーしました。しかし私は誘発されません。みんなありがとう!!!

答えて

0

AdminControllerクラスは、GETパラメータからアクションを検出して解析しますが、カスタムアクションではコントローラのアクションプロパティを自分で定義する必要がありますprocessAction()が呼び出されます。

public function initProcess() 
{ 
    parent::initProcess(); 
    if (Tools::getIsset('mail' . $this->table) { 
     $this->action = 'mail'; 
    } 
} 

今すぐあなたのカスタムアクションが定義されていること、AdminControllerは、プロセス・アクションメソッドをcallすることができます。

+0

こんにちはTheDrot。あなたは素晴らしいです。実際にはこのコードが欠けていました。今私はそれを理解する。 this-> actionは、私がprocessMail()に入れたコードを参照しています。大変ありがとう! – vanhims

関連する問題