J'ai créé des termes de taxonomie et l'ai affecté à un type de contenu 'Article' en utilisant le champ de référence de terme. J'ai créé des nœuds par programmation, mais comment définir les termes de taxonomie pour les nœuds?
Les termes de taxonomie sont déjà créés. Je veux définir le terme de taxonomie pour un nœud par programme.
Utilisez cette fonction pour obtenir l'ID de Termname
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;
}
Lorsque vous créez un nœud par programmation, vous pouvez l'affecter à n'importe quel terme comme celui-ci:
$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);
Vous pouvez utiliser certains wrappers de métadonnées d'entité pour y parvenir, par exemple:
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);
}
Lors de l'ajout de termes, j'ai trouvé que je devais ajouter $ term-> parent = array (0) sinon la table taxonomy_term_hierarchy n'est pas mise à jour correctement et les termes ne s'affichent pas dans la page de la liste des administrateurs pour ce vocabulaire