webmaster@1: tid; webmaster@1: $names[] = $term->name; webmaster@1: } webmaster@1: webmaster@1: if ($names) { webmaster@1: $title = check_plain(implode(', ', $names)); webmaster@1: drupal_set_title($title); webmaster@1: webmaster@1: switch ($op) { webmaster@1: case 'page': webmaster@1: // Build breadcrumb based on first hierarchy of first term: webmaster@1: $current->tid = $tids[0]; webmaster@1: $breadcrumb = array(); webmaster@1: while ($parents = taxonomy_get_parents($current->tid)) { webmaster@1: $current = array_shift($parents); webmaster@1: $breadcrumb[] = l($current->name, 'taxonomy/term/'. $current->tid); webmaster@1: } webmaster@1: $breadcrumb[] = l(t('Home'), NULL); webmaster@1: $breadcrumb = array_reverse($breadcrumb); webmaster@1: drupal_set_breadcrumb($breadcrumb); webmaster@1: webmaster@1: $output = theme('taxonomy_term_page', $tids, taxonomy_select_nodes($tids, $terms['operator'], $depth, TRUE)); webmaster@1: drupal_add_feed(url('taxonomy/term/'. $str_tids .'/'. $depth .'/feed'), 'RSS - '. $title); webmaster@1: return $output; webmaster@1: break; webmaster@1: webmaster@1: case 'feed': webmaster@1: $channel['link'] = url('taxonomy/term/'. $str_tids .'/'. $depth, array('absolute' => TRUE)); webmaster@1: $channel['title'] = variable_get('site_name', 'Drupal') .' - '. $title; webmaster@1: // Only display the description if we have a single term, to avoid clutter and confusion. webmaster@1: if (count($tids) == 1) { webmaster@1: $term = taxonomy_get_term($tids[0]); webmaster@1: // HTML will be removed from feed description, so no need to filter here. webmaster@1: $channel['description'] = $term->description; webmaster@1: } webmaster@1: webmaster@1: $result = taxonomy_select_nodes($tids, $terms['operator'], $depth, FALSE); webmaster@1: $items = array(); webmaster@1: while ($row = db_fetch_object($result)) { webmaster@1: $items[] = $row->nid; webmaster@1: } webmaster@1: webmaster@1: node_feed($items, $channel); webmaster@1: break; webmaster@1: webmaster@1: default: webmaster@1: drupal_not_found(); webmaster@1: } webmaster@1: } webmaster@1: else { webmaster@1: drupal_not_found(); webmaster@1: } webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Render a taxonomy term page HTML output. webmaster@1: * webmaster@1: * @param $tids webmaster@1: * An array of term ids. webmaster@1: * @param $result webmaster@1: * A pager_query() result, such as that performed by taxonomy_select_nodes(). webmaster@1: * webmaster@1: * @ingroup themeable webmaster@1: */ webmaster@1: function theme_taxonomy_term_page($tids, $result) { webmaster@1: drupal_add_css(drupal_get_path('module', 'taxonomy') .'/taxonomy.css'); webmaster@1: webmaster@1: $output = ''; webmaster@1: webmaster@1: // Only display the description if we have a single term, to avoid clutter and confusion. webmaster@1: if (count($tids) == 1) { webmaster@1: $term = taxonomy_get_term($tids[0]); webmaster@1: $description = $term->description; webmaster@1: webmaster@1: // Check that a description is set. webmaster@1: if (!empty($description)) { webmaster@1: $output .= '
'; webmaster@1: $output .= filter_xss_admin($description); webmaster@1: $output .= '
'; webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: $output .= taxonomy_render_nodes($result); webmaster@1: webmaster@1: return $output; webmaster@1: } webmaster@1: webmaster@1: /** webmaster@1: * Helper function for autocompletion webmaster@1: */ webmaster@1: function taxonomy_autocomplete($vid, $string = '') { webmaster@1: // The user enters a comma-separated list of tags. We only autocomplete the last tag. webmaster@1: $array = drupal_explode_tags($string); webmaster@1: webmaster@1: // Fetch last tag webmaster@1: $last_string = trim(array_pop($array)); webmaster@1: $matches = array(); webmaster@1: if ($last_string != '') { webmaster@1: $result = db_query_range(db_rewrite_sql("SELECT t.tid, t.name FROM {term_data} t WHERE t.vid = %d AND LOWER(t.name) LIKE LOWER('%%%s%%')", 't', 'tid'), $vid, $last_string, 0, 10); webmaster@1: webmaster@1: $prefix = count($array) ? implode(', ', $array) .', ' : ''; webmaster@1: webmaster@1: while ($tag = db_fetch_object($result)) { webmaster@1: $n = $tag->name; webmaster@1: // Commas and quotes in terms are special cases, so encode 'em. webmaster@1: if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) { webmaster@1: $n = '"'. str_replace('"', '""', $tag->name) .'"'; webmaster@1: } webmaster@1: $matches[$prefix . $n] = check_plain($tag->name); webmaster@1: } webmaster@1: } webmaster@1: webmaster@1: drupal_json($matches); webmaster@1: }