0

If I want to loop through multiple sets of theme variables in my custom theme template, how do I define them in my theme function and pass them to hook_theme?

For instance, in my case, I'm generating an email body to send via drupal_mail(), and the body will contain a list of spa openings. I want to iterate through each set in the mail (the same way views templates iterate over views rows). I have my theme function defined like so:

/**
 * Implements hook_theme().
 */
function my_module_theme($existing, $type, $theme, $path) {
  return array(
    'my_module_mail' => array(
      'variables' => array(
        'service_name' => NULL,
        'time' => NULL,
        'therapist' => NULL,
        'booking_link' => NULL,
      ),
      'template' => 'templates/my-module-mail',
    ),
  );
}

and I can pass one set of variables to the template just fine like so:

foreach ($available_openings[$tid['tid']] as $mail_opening) {
  $variables = $mail_opening;
  $body = theme('my_module_mail', $variables);
}

but what I want to do is pass an array of the variables array so that in my template can do something like this:

<?php foreach ($openings as $id => $opening): ?>
  <div class="<?php print $classes_array[$id]; ?>">
    <?php print $opening; ?>
  </div>
<?php endforeach; ?>

What do I need to change to do that?

Thanks.

0

And, the general rule of "post a question and that helps you figure it out yourself" applies here yet again.

All I did was modify my theme hook like so:

/**
 * Implements hook_theme().
 */
function my_module_theme($existing, $type, $theme, $path) {
  return array(
    'my-module-mail' => array(
      'variables' => array(
        'openings' => array(
          'service_name' => NULL,
          'time' => NULL,
          'therapist' => NULL,
          'booking_link' => NULL,
        ),
      ),
      'template' => 'templates/my-module-mail',
    ),
  );
}

and fill my $variables array like so:

  // Loop through all openings for this category.
    foreach ($available_openings[$tid['tid']] as $mail_opening) {
      $variables['openings'][] = $mail_opening;
    }
    $body = theme('my_module_mail', $variables);
    // Define mail parameters.
    $params = array(
      'subject' => t('Your Available Openings'),
      'body' => $body,
    );
    // Send the mail.
    drupal_mail('my-module-mail', 'featured_openings', $entity->mail, language_default(), $params);

and it works like a charm.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.