2017-02-22 107 views
0

Я попытался создать модуль Prestashop (так называемый TestOne) для отправки почты клиенту при каждом создании нового заказа. Я использую Mail::Send(), подключенный в пределах actionValidateOrder, но весь модуль, похоже, не работает вообще.Реализация Mail :: Send() в пользовательском модуле Prestashop для отправки электронной почты

Пожалуйста, скажите мне, что случилось с моим кодом - вот мой 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 шаблон электронной почты (тест.) В mails/iso_lang папке, где iso_lang является ISO код языка с ID 2 ???
  • $template_vars Параметр функции отправки должен быть массивом. Вы отправляете «Салют». Вы можете передать пустой массив: array().
  • Другие вещи, которые вы должны проверить, связаны с настройкой электронной почты в вашем магазине. Попробуйте проверить конфигурацию в меню «Дополнительные параметры» -> «Электронная почта» перед продолжением.

Удачи.