如何以编程方式为节点设置分类术语?


18

我创建了分类术语,并使用术语参考字段将其分配给内容类型“ Article ”。我通过编程方式创建了节点,但是如何为节点设置分类术语呢?

分类术语已创建。我想以编程方式为节点设置分类术语。

Answers:


17

使用此功能从Termname获取ID

function _get_tid_from_term_name($term_name) {
  $vocabulary = 'tags';
  $arr_terms = taxonomy_get_term_by_name($term_name, $vocabulary);
  if (!empty($arr_terms)) {
    $arr_terms = array_values($arr_terms);
    $tid = $arr_terms[0]->tid;
  }
   else {
    $vobj = taxonomy_vocabulary_machine_name_load($vocabulary);
    $term = new stdClass();
    $term->name = $term_name;
    $term->vid = $vobj->vid;
    taxonomy_term_save($term);
    $tid = $term->tid;
  }
  return $tid;
}

我喜欢它的多功能性(它的其他部分),因此添加了术语。
Eduardo Chongkan,2013年

15

以编程方式创建节点时,可以将其分配给以下任何术语:

$node = new stdClass();
$node->type = 'YOUR_CONTENT_TYPE_NAME';
$node->title = 'title';

$node->language = LANGUAGE_NONE;
node_object_prepare($node);

//id of your taxonomy term
$tid = 1;

//add term to a node field
//field_yourfield_name - machine name of your term reference field

$node->field_yourfield_name[$node->language][0]['tid'] = $tid;
node_save($node);

1
@ neok.Thanks。使用术语ID可以很好地工作。但是如何设置术语名称呢?就像$ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
Ranjani 2013年

2
有谁知道如何在drupal 7中使用分类法术语名称(而不是分类法ID)标记节点(以编程方式)?
Ranjani 2013年

@pretty使用taxonomy_get_term_by_name获取术语对象,然后使用tid。
Lee Woodman

2

您可以使用一些实体元数据包装器来实现,例如:

try {
  $w_node = entity_metadata_wrapper('node', $entity);
  $w_some_term = entity_metadata_wrapper('taxonomy_term', 1234);
  $w_node->field_term_ref = $w_some_term->tid->value();
  $w_node->save();
} catch (Exception $e) {
  drupal_set_message(t('Error for node: @title, message: @error.',
        array('@title' => $w_node->title->value(), '@error' => $e->getMessage())), 'error');
  watchdog_exception('foo', $e);
}

1
+1用于使用EMW。他们还有一个方便的方法getIdentifier(),比少一步$w_some_term->tid->value()。这是一篇很棒的文章,可以帮助我更好地理解这个概念,并且在使用EMW时经常参考:
scotself

1

添加术语时,我发现我需要添加$ term-> parent = array(0),否则taxonomy_term_hierarchy表未正确更新,并且该术语未显示在该词汇表的管理列表页面中

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.