2011-10-13 2 views
3

Я эту функцию почты в моем пользовательском модулеКак применить файл шаблона (TPL) для тела сообщения электронной почты

function mymodule_mail($key, &$message, $params) { 
    switch ($key) { 
    case 'notification': 
     $message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed'; 
     $message['subject'] = $params['subject']; 
     $message['body'] = t('<table style="border:2px solid black;"><tr><td>MESSAGE BODY </td><td><b>'.$params['msg'].'</b></td></tr></table>'); 
     break;  
    } 
} 

Здесь вы можете ясно видеть, что для тела сообщения, я использую некоторые HTML-теги.

Ниже код вызывает функцию почты, которая написана в моем блоке.

$params = array(
     'subject' => 'email subject', 
     'msg' => 'message body', 
); 
drupal_mail('mymodule', 'notification', 'email address', language_default(), $params); 

Я хочу знать, есть ли простой способ применять файл шаблон (.tpl.php) для моего тела сообщения, так что я могу мои все CSS стилей в этом TPL файла.

Любое предложение будет принята с благодарностью.

ответ

6

Вам нужно создать тему звать к ней

function mymodule_theme() { 
    $path = drupal_get_path('module', 'mymodule') . '/templates'; 
    return array(
     'mymodule_mail_template' => array(
      'template' => 'your-template-file', //note that there isn't an extension on here, it assumes .tpl.php 
      'arguments' => array('message' => ''), //the '' is a default value 
      'path' => $path, 
     ), 
    ); 
} 

Теперь, когда у вас есть, что вы можете изменить способ вы назначая Тело

$message['body'] = theme('mymodule_mail_template', array('message' => $params['msg']); 

ключевые message должен соответствовать аргумент вы поставляемый в mymodule_theme(), что он делает.

Теперь вы можете просто создать свой шаблон-файл-файл.tpl.php в папке templates/ модуля (вам придется это сделать), и вы можете использовать переменную $message в своем шаблоне, чтобы делать все, что хотите. Имя переменной соответствует имени аргумента темы.

После того, как ваш модуль настроен правильно, обязательно очистите кеш. Я не могу сказать, сколько времени мне потребовалось, чтобы понять, что в первый раз, когда я начал работать с Drupal, и сколько времени я потратил на попытки исправить несуществующие ошибки.

+1

+1 хороший простой способ, сохраняет накладные расходы другого модуля Contrib – Clive

+0

Большое вам спасибо. Также я согласен с @clive –

 Смежные вопросы

  • Нет связанных вопросов^_^