Comment définir un terme de taxonomie par programmation pour un nœud?

18

J'ai créé des termes de taxonomie et je les ai affectés à un type de contenu « Article » à l'aide du 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 programmation .

Ranjani
la source

Réponses:

17

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;
}
dang
la source
J'aime sa polyvalence (le reste), donc il ajoute le terme.
Eduardo Chongkan
15

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);
Petro Popelyshko
la source
1
@ neok.Thanks.It fonctionne bien en utilisant le terme id.Mais comment définir les noms de terme? est comme $ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
Ranjani
2
Quelqu'un sait comment étiqueter le nœud (par programme) en utilisant le nom de taxonomie au lieu de l'ID de taxonomie dans Drupal 7?
Ranjani
@pretty Utilisez taxonomy_get_term_by_name pour obtenir le terme objet, puis utilisez le tid.
Lee Woodman
2

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);
}
kenorb
la source
1
+1 pour l'utilisation des EMW. Ils ont également une méthode pratique getIdentifier (), qui est une étape de moins que $w_some_term->tid->value(). Voici un excellent article qui m'a aidé à mieux comprendre ce concept et auquel je me réfère régulièrement lorsque j'utilise des EMW:
scotself
1

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 d'admin pour ce vocabulaire

user3425125
la source