You are here

function hs_taxonomy_field_formatter_view in Hierarchical Select 7.3

Implements hook_field_formatter_view().

File

modules/hs_taxonomy.module, line 453
Implementation of the Hierarchical Select API for the Taxonomy module.

Code

function hs_taxonomy_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {

  // Extract required field information.
  $vocabulary = taxonomy_vocabulary_machine_name_load($field['settings']['allowed_values'][0]['vocabulary']);

  // Extract the lineage information from the items (this was added by
  // hs_taxonomy_field_formatter_prepare_view()).
  $lineages = array();
  foreach ($items as $delta => $item) {
    if (!empty($item['hs_lineages'])) {
      $metadata = $item['hs_lineages'];
      for ($i = 0; $i < count($metadata); $i++) {
        $term = new StdClass();
        $term->tid = $metadata[$i]['tid'];
        $term->vid = $vocabulary->vid;
        $term->vocabulary_machine_name = $vocabulary->machine_name;
        $term->name = $metadata[$i]['label'];
        $lineages[$metadata[$i]['lineage']][$metadata[$i]['level']] = $term;
      }
    }
  }

  // Actual formatting.
  $element = array();
  switch ($display['type']) {
    case 'hs_taxonomy_term_reference_hierarchical_text':
      for ($l = 0; $l < count($lineages); $l++) {
        $element[$l]['#theme'] = 'hs_taxonomy_formatter_lineage';
        for ($level = 0; $level < count($lineages[$l]); $level++) {
          $term = $lineages[$l][$level];
          $element[$l]['#lineage'][$level] = array(
            '#markup' => $term->name,
          );
        }
      }
      break;
    case 'hs_taxonomy_term_reference_hierarchical_links':
      for ($l = 0; $l < count($lineages); $l++) {
        $element[$l]['#theme'] = 'hs_taxonomy_formatter_lineage';
        for ($level = 0; $level < count($lineages[$l]); $level++) {
          $term = $lineages[$l][$level];
          $uri = entity_uri('taxonomy_term', $term);
          $uri['options']['html'] = TRUE;
          $element[$l]['#lineage'][$level] = array(
            '#type' => 'link',
            '#title' => $term->name,
            '#href' => $uri['path'],
            '#options' => $uri['options'],
          );
        }
      }
      break;
    case 'hs_taxonomy_term_reference_hierarchical_links_last_text':
      for ($l = 0; $l < count($lineages); $l++) {
        $element[$l]['#theme'] = 'hs_taxonomy_formatter_lineage';
        for ($level = 0; $level < count($lineages[$l]) - 1; $level++) {
          $term = $lineages[$l][$level];
          $uri = entity_uri('taxonomy_term', $term);
          $element[$l]['#lineage'][$level] = array(
            '#type' => 'link',
            '#title' => $term->name,
            '#href' => $uri['path'],
            '#options' => $uri['options'],
          );
        }
        if (count($lineages[$l]) > 0) {
          $level = count($lineages[$l]) - 1;
          $term = $lineages[$l][$level];
          $element[$l]['#lineage'][$level] = array(
            '#markup' => $term->name,
          );
        }
      }
      break;
    case 'hs_taxonomy_term_reference_hierarchical_text_last_link':
      for ($l = 0; $l < count($lineages); $l++) {
        $element[$l]['#theme'] = 'hs_taxonomy_formatter_lineage';
        for ($level = 0; $level < count($lineages[$l]) - 1; $level++) {
          $term = $lineages[$l][$level];
          $element[$l]['#lineage'][$level] = array(
            '#markup' => $term->name,
          );
        }
        if (count($lineages[$l]) > 0) {
          $level = count($lineages[$l]) - 1;
          $term = $lineages[$l][$level];
          $uri = entity_uri('taxonomy_term', $term);
          $element[$l]['#lineage'][$level] = array(
            '#type' => 'link',
            '#title' => $term->name,
            '#href' => $uri['path'],
            '#options' => $uri['options'],
          );
        }
      }
      break;
    case 'hs_taxonomy_term_reference_last_text_only':
      for ($l = 0; $l < count($lineages); $l++) {
        $element[$l]['#theme'] = 'hs_taxonomy_formatter_lineage';
        if (count($lineages[$l]) > 0) {
          $level = count($lineages[$l]) - 1;
          $term = $lineages[$l][$level];
          $element[$l]['#lineage'][0] = array(
            '#markup' => $term->name,
          );
        }
      }
      break;
    case 'hs_taxonomy_term_reference_last_link_only':
      for ($l = 0; $l < count($lineages); $l++) {
        $element[$l]['#theme'] = 'hs_taxonomy_formatter_lineage';
        if (count($lineages[$l]) > 0) {
          $level = count($lineages[$l]) - 1;
          $term = $lineages[$l][$level];
          $uri = entity_uri('taxonomy_term', $term);
          $element[$l]['#lineage'][0] = array(
            '#type' => 'link',
            '#title' => $term->name,
            '#href' => $uri['path'],
            '#options' => $uri['options'],
          );
        }
      }
      break;
  }
  if (!empty($element)) {
    $element['#attached']['css'][] = drupal_get_path('module', 'hierarchical_select') . '/hierarchical_select.css';
  }
  return $element;
}