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.

1 Answer 1

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.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.