drupaldrupal-7drupal-taxonomy

Drupal 7 - Insert taxonomy into node object


I have a script which successfully creates new nodes. But I'm having trouble setting the taxonomy before saving.

I believe in Drupal 6 I would use this method.

$cat1_tid = taxonomy_get_term_by_name($data[$i]['cat1']);
$cat2_tid = taxonomy_get_term_by_name($data[$i]['cat2']);
$cat3_tid = taxonomy_get_term_by_name($data[$i]['cat3']);
$node->taxonomy = array($cat1_tid, $cat2_tid, $cat3_tid);

I think in Drupal 7 I would do this (my field name is Catalog)

$node->taxonomy_catalog['und'][0] = array($term1Obj, $term2Obj);

taxonomy_get_term_by_name doesn't seem to return the correct object to insert into the node object.

If anyone can shed some light, appreciated.

Thanks

EDIT

Solution:

// Taxonomy
$categories = array($data[$i]['cat1'], $data[$i]['cat2'], $data[$i]['cat3']);
foreach ($categories as $key => $category) {
  if ($term = taxonomy_get_term_by_name($category)) {
    $terms_array = array_keys($term);
    $node->taxonomy_catalog[LANGUAGE_NONE][$key]['tid'] = $terms_array['0'];
  }   
} 

Solution

  • Below is some quick-and-dirty code I used recently to import "command" nodes into a site. Mid-way down, the foreach loop takes care of creating and assigning terms, as needed.

          $command = new stdClass;
          $command->language = LANGUAGE_NONE;
          $command->uid = 1;
          $command->type = 'drubnub';
          $command->title = $line['0'];
          $command->body[LANGUAGE_NONE]['0']['value'] = $line['1'];
          $command->url[LANGUAGE_NONE]['0']['value'] = trim($line['2']);
          $command->uses[LANGUAGE_NONE]['0']['value'] = $line['3'];
          $tags = explode(',', $line['4']);
          foreach ($tags as $key => $tag) {
            if ($term = taxonomy_get_term_by_name($tag)) {
              $terms_array = array_keys($term);
              $command->field_tags[LANGUAGE_NONE][$key]['tid'] = $terms_array['0'];
            } else {
              $term = new STDClass();
              $term->name = $tag;
              $term->vid = 1;
              if (!empty($term->name)) {
                $test = taxonomy_term_save($term);
                $term = taxonomy_get_term_by_name($tag);
                foreach($term as $term_id){
                  $command->product_tags[LANGUAGE_NONE][$key]['tid'] = $term_id->tid;
              }
                $command->field_tags[LANGUAGE_NONE][$key]['tid'] = $tid;
              }
            }
          }
          node_save($command);