2017-02-22 10 views
0

新しい注文が作成されるたびにメールを顧客に送信するためのPrestashopモジュール(TestOne)を作成しようとしました。私はをactionValidateOrderフックの中に引っ掛けて使用していますが、モジュール全体がまったく動作していないようです。電子メールを送信するカスタムPrestashopモジュールのMail :: Send()の実装

私のコードが間違っているものを私に教えてください - ここに私のTestOne.phpです:

<?php 

if (!defined('_PS_VERSION_')) { 
    exit; 
} 

class TestOne extends Module 
{ 
    protected $config_form = false; 

    public function __construct() 
    { 
     $this->name = 'TestOne'; 
     $this->tab = 'emailing'; 
     $this->version = '1.0.0'; 
     $this->author = 'Claire Penvenen'; 
     $this->need_instance = 0; 

     /** 
     * Set $this->bootstrap to true if your module is compliant with bootstrap (PrestaShop 1.6) 
     */ 
     $this->bootstrap = true; 

     parent::__construct(); 

     $this->displayName = $this->l('TestOne'); 
     $this->description = $this->l('Testing TestOne module for sending an email to customers after they had made an order.'); 
    } 

    /** 
    * Don't forget to create update methods if needed: 
    * http://doc.prestashop.com/display/PS16/Enabling+the+Auto-Update 
    */ 
    public function install() 
    { 
     Configuration::updateValue('TESTONE_LIVE_MODE', false); 

     return parent::install() && 
      $this->registerHook('header') && 
      $this->registerHook('backOfficeHeader') && 
      $this->registerHook('actionValidateOrder'); 
    } 

    public function uninstall() 
    { 
     Configuration::deleteByName('TESTONE_LIVE_MODE'); 

     return parent::uninstall(); 
    } 

    /** 
    * Load the configuration form 
    */ 
    public function getContent() 
    { 
     /** 
     * If values have been submitted in the form, process. 
     */ 
     if (((bool)Tools::isSubmit('submitTestOneModule')) == true) { 
      $this->postProcess(); 
     } 

     $this->context->smarty->assign('module_dir', $this->_path); 

     $output = $this->context->smarty->fetch($this->local_path.'views/templates/admin/configure.tpl'); 

     return $output.$this->renderForm(); 
    } 

    /** 
    * Create the form that will be displayed in the configuration of your module. 
    */ 
    protected function renderForm() 
    { 
     $helper = new HelperForm(); 

     $helper->show_toolbar = false; 
     $helper->table = $this->table; 
     $helper->module = $this; 
     $helper->default_form_language = $this->context->language->id; 
     $helper->allow_employee_form_lang = Configuration::get('PS_BO_ALLOW_EMPLOYEE_FORM_LANG', 0); 

     $helper->identifier = $this->identifier; 
     $helper->submit_action = 'submitTestOneModule'; 
     $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false) 
      .'&configure='.$this->name.'&tab_module='.$this->tab.'&module_name='.$this->name; 
     $helper->token = Tools::getAdminTokenLite('AdminModules'); 

     $helper->tpl_vars = array(
      'fields_value' => $this->getConfigFormValues(), /* Add values for your inputs */ 
      'languages' => $this->context->controller->getLanguages(), 
      'id_language' => $this->context->language->id, 
     ); 

     return $helper->generateForm(array($this->getConfigForm())); 
    } 

    /** 
    * Create the structure of your form. 
    */ 
    protected function getConfigForm() 
    { 
     return array(
      'form' => array(
       'legend' => array(
       'title' => $this->l('Settings'), 
       'icon' => 'icon-cogs', 
       ), 
       'input' => array(
        array(
         'type' => 'switch', 
         'label' => $this->l('Live mode'), 
         'name' => 'TESTONE_LIVE_MODE', 
         'is_bool' => true, 
         'desc' => $this->l('Use this module in live mode'), 
         'values' => array(
          array(
           'id' => 'active_on', 
           'value' => true, 
           'label' => $this->l('Enabled') 
          ), 
          array(
           'id' => 'active_off', 
           'value' => false, 
           'label' => $this->l('Disabled') 
          ) 
         ), 
        ), 
        array(
         'col' => 3, 
         'type' => 'text', 
         'prefix' => '<i class="icon icon-envelope"></i>', 
         'desc' => $this->l('Enter a valid email address'), 
         'name' => 'TESTONE_ACCOUNT_EMAIL', 
         'label' => $this->l('Email'), 
        ), 
        array(
         'type' => 'password', 
         'name' => 'TESTONE_ACCOUNT_PASSWORD', 
         'label' => $this->l('Password'), 
        ), 
       ), 
       'submit' => array(
        'title' => $this->l('Save'), 
       ), 
      ), 
     ); 
    } 

    /** 
    * Set values for the inputs. 
    */ 
    protected function getConfigFormValues() 
    { 
     return array(
      'TESTONE_LIVE_MODE' => Configuration::get('TESTONE_LIVE_MODE', true), 
      'TESTONE_ACCOUNT_EMAIL' => Configuration::get('TESTONE_ACCOUNT_EMAIL', '[email protected]'), 
      'TESTONE_ACCOUNT_PASSWORD' => Configuration::get('TESTONE_ACCOUNT_PASSWORD', null), 
     ); 
    } 

    /** 
    * Save form data. 
    */ 
    protected function postProcess() 
    { 
     $form_values = $this->getConfigFormValues(); 

     foreach (array_keys($form_values) as $key) { 
      Configuration::updateValue($key, Tools::getValue($key)); 
     } 
    } 

    /** 
    * Add the CSS & JavaScript files you want to be loaded in the BO. 
    */ 
    public function hookBackOfficeHeader() 
    { 
     if (Tools::getValue('module_name') == $this->name) { 
      $this->context->controller->addJS($this->_path.'views/js/back.js'); 
      $this->context->controller->addCSS($this->_path.'views/css/back.css'); 
     } 
    } 

    /** 
    * Add the CSS & JavaScript files you want to be added on the FO. 
    */ 
    public function hookHeader() 
    { 
     $this->context->controller->addJS($this->_path.'/views/js/front.js'); 
     $this->context->controller->addCSS($this->_path.'/views/css/front.css'); 
    } 


    public function hookActionValidateOrder($params) 
    { 
     $context = Context::getContext(); 
     $customer = $params['customer']; 
     $customer_mail = $customer->email; 
     Mail::Send(2,'test','Sending email test','Salut',$customer_mail,'My name'); 
    } 
} 

答えて

1
  • test電子メールテンプレート(テスト。)iso_langが持つ言語のISOコードですmails/iso_langフォルダにはありますID 2 ??
  • $template_vars Send関数のparamは配列でなければなりません。あなたは「サルート」を送っています。空の配列を渡すことができます:array()
  • 確認する必要があるその他の事項は、お店のメール設定に関連しています。続行する前に[高度なパラメータ] - > [電子メール]メニューで設定をテストしてみてください。

幸運。

関連する問題