5.x-2.x branch
Adds taxonomy terms to the sitemap.
| Name | Description |
|---|---|
| xmlsitemap_term_form_alter | Implementation of hook_form_alter(). |
| xmlsitemap_term_nodeapi | Implementation of hook_nodeapi(). |
| xmlsitemap_term_taxonomy | Implementation of hook_taxonomy(). |
| xmlsitemap_term_xmlsitemap_description | Implementation of hook_xmlsitemap_description(). |
| xmlsitemap_term_xmlsitemap_links | Implementation of hook_xmlsitemap_links(). |
- <?php
-
- /**
- * @file
- * Adds taxonomy terms to the sitemap.
- */
-
- /**
- * @addtogroup xmlsitemap
- * @{
- */
-
- /*****************************************************************************
- * Drupal hooks.
- ****************************************************************************/
-
- /**
- * Implementation of hook_form_alter().
- */
- function xmlsitemap_term_form_alter($form_id, &$form) {
- if (isset($form['type']['#value']) && $form_id == $form['type']['#value'] .'_node_form') {
- $node = $form['#node'];
- if (isset($form['type']) && isset($node->nid)) {
- if (isset($node->taxonomy)) {
- $terms = $node->taxonomy;
- }
- else {
- $terms = taxonomy_node_get_terms($node->nid);
- }
- $form['xmlsitemap_term_taxonomy'] = array(
- '#type' => 'value',
- '#value' => $terms,
- );
- }
- }
- else {
- switch ($form_id) {
- case 'taxonomy_form_term':
- $priority = isset($form['tid']['#value']) ? db_result(db_query("SELECT priority_override FROM {xmlsitemap_term} WHERE tid = %d", $form['tid']['#value'])) : 'NULL';
- if ($priority === FALSE) {
- $priority = 'NULL';
- }
- if (user_access('override term priority')) {
- $options = xmlsitemap_priority_options('both');
- $default = variable_get('xmlsitemap_term_vocabulary_priority_'. $form['vid']['#value'], '0.5');
- $form['xmlsitemap_term_priority'] = array(
- '#type' => 'select',
- '#title' => t('sitemap priority'),
- '#default_value' => $priority,
- '#options' => $options,
- '#description' => t('The default priority is %priority.', array('%priority' => $options[$default])),
- );
- $form['submit']['#weight'] = 1;
- $form['delete']['#weight'] = 1;
- }
- else {
- $form['xmlsitemap_term_priority'] = array('#type' => 'value', '#value' => $priority);
- }
- break;
- case 'taxonomy_form_vocabulary':
- $form['xmlsitemap_term_vocabulary_priority'] = array(
- '#type' => 'select',
- '#title' => t('sitemap priority'),
- '#default_value' => variable_get('xmlsitemap_term_vocabulary_priority_'. $form['vid']['#value'], 0.5),
- '#options' => xmlsitemap_priority_options('exclude'),
- '#description' => t('This will be the default priority of terms in this vocabulary.'),
- );
- $form['submit']['#weight'] = 1;
- $form['delete']['#weight'] = 1;
- break;
- }
- }
- }
-
- /**
- * Implementation of hook_nodeapi().
- */
- function xmlsitemap_term_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
- switch ($op) {
- case 'insert':
- if (!empty($node->taxonomy)) {
- $terms = array_keys($node->taxonomy);
- $query_args = array_merge(array($node->changed), $terms);
- }
- break;
- case 'update':
- $taxonomy = empty($node->taxonomy) ? array() : array_keys($node->taxonomy);
- $xmlsitemap_term_taxonomy = empty($node->xmlsitemap_term_taxonomy) ? array() : array_keys($node->xmlsitemap_term_taxonomy);
- $terms = array_merge(array_diff($taxonomy, $xmlsitemap_term_taxonomy), array_diff($xmlsitemap_term_taxonomy, $taxonomy));
- $query_args = array_merge(array($node->changed), $terms);
- break;
- case 'delete':
- if (!empty($node->taxonomy)) {
- $terms = array_keys($node->taxonomy);
- $query_args = array_merge(array(REQUEST_TIME), $terms);
- }
- break;
- }
- if (!empty($terms)) {
- db_query("UPDATE {xmlsitemap_term}
- SET previously_changed = last_changed, last_changed = %d WHERE tid IN(". xmlsitemap_placeholders($terms, 'int') .")",
- $query_args
- );
- xmlsitemap_flag_sitemap();
- }
- }
-
- /**
- * Implementation of hook_taxonomy().
- */
- function xmlsitemap_term_taxonomy($op, $type, $array = NULL) {
- if ($type == 'vocabulary') {
- switch ($op) {
- case 'delete':
- variable_del('xmlsitemap_term_vocabulary_priority_'. $array['vid']);
- xmlsitemap_flag_sitemap();
- break;
- case 'insert':
- case 'update':
- if (variable_get('xmlsitemap_term_vocabulary_priority_'. $array['vid'], 0.5) != $array['xmlsitemap_term_vocabulary_priority']) {
- variable_set('xmlsitemap_term_vocabulary_priority_'. $array['vid'], $array['xmlsitemap_term_vocabulary_priority']);
- xmlsitemap_flag_sitemap();
- }
- break;
- }
- }
- else {
- switch ($op) {
- case 'insert':
- $priority = isset($array['xmlsitemap_term_priority']) ? $array['xmlsitemap_term_priority'] : 'NULL';
- db_query("INSERT INTO {xmlsitemap_term} (tid, last_changed, priority_override) VALUES (%d, %d, %s)",
- $array['tid'], REQUEST_TIME, $priority);
- break;
- case 'update':
- if (!isset($array['xmlsitemap_term_priority'])) {
- $priority = db_result(db_query("SELECT priority_override FROM {xmlsitemap_term} WHERE tid = %d", $array['tid']));
- $array['xmlsitemap_term_priority'] = isset($priority) && $priority !== FALSE ? $priority : 'NULL';
- }
- db_query("UPDATE {xmlsitemap_term}
- SET priority_override = %s
- WHERE tid = %d",
- $array['xmlsitemap_term_priority'], $array['tid']
- );
- break;
- case 'delete':
- db_query("DELETE FROM {xmlsitemap_term} WHERE tid = %d", $array['tid']);
- break;
- }
- xmlsitemap_flag_sitemap();
- }
- }
-
- /**
- * Implementation of hook_xmlsitemap_description().
- */
- function xmlsitemap_term_xmlsitemap_description() {
- return '<dt>'. t('XML sitemap term') .'</dt>'.
- '<dd>'. t('It adds <a href="@terms">taxonomy terms</a> (categories) to the sitemap. You can change the default priority when you add or edit a vocabulary, and you can override the default priority when you add or edit individual terms.', array('@terms' => url('admin/content/taxonomy'))) .'</dd>';
- }
-
- /**
- * Implementation of hook_xmlsitemap_links().
- */
- function xmlsitemap_term_xmlsitemap_links() {
- $excludes = array();
- $result = db_query("SELECT vid FROM {vocabulary}");
- while ($vocabulary = db_fetch_object($result)) {
- if (variable_get('xmlsitemap_term_vocabulary_priority_'. $vocabulary->vid, 0.5) < 0) {
- $excludes[] = $vocabulary->vid;
- }
- }
- if (empty($excludes)) {
- $excludes = array(0);
- }
- $tid = 0;
- $frontpage = explode('/', drupal_get_normal_path(variable_get('site_frontpage', 'node')));
- if (count($frontpage) == 3 && $frontpage[0] == 'taxonomy' && $frontpage[1] == 'term' && is_numeric($frontpage[2])) {
- $tid = $frontpage[2];
- }
- elseif (count($frontpage) == 2 && $frontpage[0] == 'forum' && is_numeric($frontpage[1])) {
- $tid = $frontpage[1];
- }
- $query_args = array_merge($excludes, array($tid));
- $result = db_query(db_rewrite_sql("SELECT t.tid, t.vid, v.module, xt.last_changed, xt.previously_changed, xt.priority_override
- FROM {term_data} t
- LEFT JOIN {vocabulary} v ON t.vid = v.vid
- LEFT JOIN {xmlsitemap_term} xt ON t.tid = xt.tid
- WHERE (t.vid NOT IN (". xmlsitemap_placeholders($excludes, 'int') .") AND xt.priority_override IS NULL OR xt.priority_override >= 0)
- AND t.tid <> %d
- GROUP BY t.tid, t.vid, v.module, xt.last_changed, xt.previously_changed, xt.priority_override", 't', 'tid'), $query_args
- );
- while ($term = db_fetch_object($result)) {
- $path = taxonomy_term_path($term);
- $alias = drupal_lookup_path('alias', $path);
- if ($alias === FALSE) {
- $alias = NULL;
- }
- $url = xmlsitemap_url($path, $alias, NULL, NULL, TRUE);
- $age = REQUEST_TIME - $term->last_changed;
- $interval = empty($term->previously_changed) ? 0 : $term->last_changed - $term->previously_changed;
- if (isset($term->priority_override)) {
- $priority = $term->priority_override;
- }
- else {
- $priority = min(variable_get("xmlsitemap_term_vocabulary_priority_$term->vid", 0.5), 1);
- }
- db_query("INSERT INTO {xmlsitemap} (loc, lastmod, changefreq, priority) VALUES ('%s', %d, %d, %f)", $url, $term->last_changed, max($age, $interval), $priority);
- }
- }
-
- /**
- * @} End of "addtogroup xmlsitemap".
- */
-