Drupal: Get a comma-separated list of categories (taxonomy)

Drupal logoDrupal’s default way of displaying categories really bugs me. They compile all the categories into an unordered list, which adds a lot of pointless complexity to the theme.

Coming from the WordPress school, I’d much prefer to have a comma-separated list of categories. Well, after an epic battle with my node.tpl.php file and much searching on the Interwebs, I’ve come up with a solution. It’s based heavily on a code snippet used in this Lullabot article.

Essentially, what we need to do is parse through all the terms, build a link for each taxonomy term and then use the implode function to build the comma separated list. Here’s a sample of the code I’m using:


<?php
	$term_links = array();
	// "implode" makes the terms comma-separated
	foreach ($node->taxonomy as $term) {
		$term_links[] = l($term->name, 'taxonomy/term/' . $term->tid);
	}
	print implode(', ', $term_links);
?>

I’m currently using this directly in the node.tpl.php, but what I’d really like to do is wrap this in a function and place it in the template.php file so that I can redistribute it with my theme when I make it available. And so that I can carry it across to other themes I might design.

Any hints or tips along those lines would be greatly appreciated!

4 comments

  1. Moving the code to template.php is easy.In template.php your (modified) code:<code>function phptemplate_preprocess_node(&$vars) {   // Taxonomy hook to show comma separated terms  if (module_exists(‘taxonomy’)) {    $term_links = array();    foreach ($vars[‘node’]->taxonomy as $term) {      $term_links[] = l($term->name, ‘taxonomy/term/’ . $term->tid);    }    $vars[‘node_terms’] = implode(‘, ‘, $term_links);  }}</code>In the node template (node.tpl.php and what have you): <code>[?php if ($terms) { ?]   [div class=”tags”]    [span][?php print t(‘Tags’); ?]:[/span] [?php print $node_terms; ?]  [/div][?php } ?]  </code>(I replaced the angled brackets, not sure if they would display otherwise.) Another great code snippet I just found here: http://www.kobashicomputing.com/creating-a-comma-delimited-taxonomy-list-in-drupal Stephan PlankenPS: (1) your CAPTCHAs are extermely difficult, and (2) I had difficulty entering this code in your editor.

  2. As a matter of fact, change the code to include a title:       $term_links[] = l($term->name, ‘taxonomy/term/’ . $term->tid, array(          ‘attributes’ => array(            ‘title’ => $term->description          )        )      );

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s