Use profile field as token
2011 10 Sep

Use profile fields as tokens in user emails in Drupal

In Drupal, many a time I have found the need of using user profile values in my email configurations at "User Settings" and let the client use that too. The need for accessing Drupal user fields as tokens in user emails can be addressed with a very small piece of code. Let's say we need the tokens of profile first name, last name, full name and profile title like 'Mr.', 'Mrs.', etc, here is what we can do ...In Drupal, many a time I have found the need of using user profile values in my email configurations at "User Settings" and let the client use that too. The need to include custom tokens in the user registration emails can be addressed with a very small piece of code. Let's say we need the tokens of profile first name, last name, full name and profile title like 'Mr.', 'Mrs.', etc, here is what we can do:

  1. Alter the user settings form using hook_form_alter to mention the tokens that you want to use
  2. Now, we need to implement the hook mail alter to replace the tokens in the message and the subject of configured email

In Drupal, many a time I have found the need of using user profile values in my email configurations at "User Settings" and let the client use that too. The need for tokens in user emails can be addressed with a very small piece of code. Let's say we need the tokens of profile first name, last name, full name and profile title like 'Mr.', 'Mrs.', etc, here is what we can do:


1.Alter the user settings form using hook_form_alter to mention the tokens that you want to use

<?php /** * Implementation of hook_form_alter(). */ 
function example_form_alter(&amp;$form, &amp;$form_state, $form_id) {
  switch($form_id) {
    case 'user_admin_settings':
      if (is_array($form['email']) &amp;&amp; $form['email']['#type'] == 'fieldset') {
        foreach ($form['email'] AS $key =&gt; $value) {
          if (is_array($value) &amp;&amp; $value['#type'] == 'fieldset') {
            $form['email'][$key]['#description'] .= '<br />' . t('Also available variables are: ') . '!profile_first_name, !profile_last_name, !profile_full_name, !profile_title';
          }
        }
      }
      break;
  }
} 
?> 

2. Now, we need to implement the hook mail alter to replace the tokens in the message and the subject of configured email

&lt;?php
/**
 * Implementation of hook_mail_alter().
 */
function example_mail_alter(&amp;$message) {
  switch ($message['id']) {
    case "user_register_admin_created":
    case "user_register_no_approval_required": 
    case "user_register_pending_approval":
    case "user_password_reset": 
    case "user_status_blocked":
    case "user_status_deleted":
    case "logintoboggan_register_no_approval_required":
      $token_replacements = array(
        '!profile_first_name' =&gt; $message['params']['account']-&gt;profile_first_name,
        '!profile_last_name' =&gt; $message['params']['account']-&gt;profile_last_name,
        '!profile_full_name' =&gt; $message['params']['account']-&gt;profile_first_name . ' ' . $message['params']['account']-&gt;profile_last_name,
        '!profile_title' =&gt; $message['params']['account']-&gt;profile_title,
      );
      // You can also use $message['params']['account']-&gt;uid to get more values related to the user like number of new messages (privatemsg) he/she got on the site
      $message['subject'] = strtr($message['subject'], $token_replacements);
      $message['body'][0] = strtr($message['body'][0], $token_replacements);
      break;
  }
}
?&gt;

There are more ways than one to solve the same problem, and the same holds true for Drupal. Because in this case, the code gives me exactly what I need, no less no more, and is a short and easily comprehensive piece of code, I prefer it over any contributed module which offers me too much for a small piece of requirement.

Latest Blogs

webshop

Drupal: The ideal solution for your e-Commerce Website

In the last few decades, the online merchandising sector has made strides at an unprecedented pace following that, the demand and emergence of many e-commerce platforms are on the rise. 

Read More

Drupal 9 Upgrade

The Roadmap to upgrade Drupal site to Drupal 9

Drupal is approaching with its next big evolution and the upcoming release that is none other than Drupal 9.

Read More

How to Choose Web Development Agencies

Points to check before choosing the right website development company

In today’s day and age, where the digital population is increasing exponentially, no credible business can or should refrain from having a strong and steady web presence.

Read More

Wordpress to Drupal

Should I plan to move my Wordpress Website into the Latest Drupal version?

If you're here, I assume you already have a website built on WordPress but you're not satisfied with it, or perhaps you're here to have a clear idea about why you should give a thought to migrating

Read More