taxonomy_node_save
- Versions
- 4.6 – 5
taxonomy_node_save($nid, $terms)- 6
taxonomy_node_save($node, $terms)
Save term associations for a given node.
Code
modules/taxonomy/taxonomy.module, line 647
<?php
function taxonomy_node_save($node, $terms) {
taxonomy_node_delete_revision($node);
// Free tagging vocabularies do not send their tids in the form,
// so we'll detect them here and process them independently.
if (isset($terms['tags'])) {
$typed_input = $terms['tags'];
unset($terms['tags']);
foreach ($typed_input as $vid => $vid_value) {
$typed_terms = drupal_explode_tags($vid_value);
$inserted = array();
foreach ($typed_terms as $typed_term) {
// See if the term exists in the chosen vocabulary
// and return the tid; otherwise, add a new record.
$possibilities = taxonomy_get_term_by_name($typed_term);
$typed_term_tid = NULL; // tid match, if any.
foreach ($possibilities as $possibility) {
if ($possibility->vid == $vid) {
$typed_term_tid = $possibility->tid;
}
}
if (!$typed_term_tid) {
$edit = array('vid' => $vid, 'name' => $typed_term);
$status = taxonomy_save_term($edit);
$typed_term_tid = $edit['tid'];
}
// Defend against duplicate, differently cased tags
if (!isset($inserted[$typed_term_tid])) {
db_query('INSERT INTO {term_node} (nid, vid, tid) VALUES (%d, %d, %d)', $node->nid, $node->vid, $typed_term_tid);
$inserted[$typed_term_tid] = TRUE;
}
}
}
}
if (is_array($terms)) {
foreach ($terms as $term) {
if (is_array($term)) {
foreach ($term as $tid) {
if ($tid) {
db_query('INSERT INTO {term_node} (nid, vid, tid) VALUES (%d, %d, %d)', $node->nid, $node->vid, $tid);
}
}
}
else if (is_object($term)) {
db_query('INSERT INTO {term_node} (nid, vid, tid) VALUES (%d, %d, %d)', $node->nid, $node->vid, $term->tid);
}
else if ($term) {
db_query('INSERT INTO {term_node} (nid, vid, tid) VALUES (%d, %d, %d)', $node->nid, $node->vid, $term);
}
}
}
}
?>Login or register to post comments 
node by reference
Passing
$nodeby reference, adding what's returned bytaxonomy_node_get_terms($node)would be handy here.Of course you can get around it easy enough by setting the weight of your module to be greater than the taxonomy module and calling the above function.