Відповіді:
Використовуйте цю функцію, щоб отримати ідентифікатор від терміна
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;
}
Створюючи вузол програмно, ви можете призначити його будь-якому терміну на зразок цього:
$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);
Для цього можна використовувати деякі обгортки метаданих сутності , наприклад:
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);
}
$w_some_term->tid->value()
. Ось чудова стаття, яка допомогла мені зрозуміти цю концепцію набагато краще, і до якої я регулярно посилаюсь, коли використовую ЕМВ:
Додаючи терміни, я виявив, що мені потрібно додати $ term-> parent = array (0), інакше таблиця taxonomy_term_hierarchy не оновлюється належним чином, а терміни не відображаються на сторінці списку адміністратора для цього словника.