Добавление классов страницам материалов на основе терминов таксономии

Для темизации страниц материалов на основе прикрепленных терминов таксономии можно добавлять тегу body классы с именами терминов. Если же термины имеют русские(кириллические) символы, то можно делать классы на основе tid терминов. Классы будем добавлять в preprocess_html функции используемой темы. Для получения всех терминов ноды в Drupal 7 нужно написать вспомогательную функцию _MYTHEME_taxonomy_node_get_terms(). В Drupal 6 для выполнения данной задачи есть функция taxonomy_node_get_terms().


/**
 * Implements hook_preprocess_html().
 */
function MYTHEME_preprocess_html(&$variables) {
  if(arg(0)=='node' && is_numeric(arg(1))) {
    $node = node_load(arg(1));  
    $results = _mytheme_taxonomy_node_get_terms($node); 
    if(is_array($results)) {
      foreach ($results as $item) { 
        $term_name = strtolower(drupal_clean_css_identifier($item->name));
        $variables['classes_array'][] = "taxonomy-".$term_name;
        // Если термины кириллические, то используем tid
        //$variables['classes_array'][] = "taxonomy-".$item->tid;
      }
    }
  }
}
 
function _MYTHEME_taxonomy_node_get_terms($node, $key = 'tid') {
  static $terms;
  if (!isset($terms[$node->vid][$key])) {
    $query = db_select('taxonomy_index', 'r');
    $t_alias = $query->join('taxonomy_term_data', 't', 'r.tid = t.tid');
    $v_alias = $query->join('taxonomy_vocabulary', 'v', 't.vid = v.vid');
    $query->fields( $t_alias );
    $query->condition("r.nid", $node->nid);
    $result = $query->execute();
    $terms[$node->vid][$key] = array();
    foreach ($result as $term) {
      $terms[$node->vid][$key][$term->$key] = $term;
    }
  }
  return $terms[$node->vid][$key];
}