Come impostare un termine di tassonomia a livello di codice per un nodo?


18

Ho creato termini di tassonomia e assegnato a un tipo di contenuto " Articolo " utilizzando il campo di riferimento del termine. Ho creato nodi programmaticamente, ma come impostare i termini di tassonomia per i nodi?

I termini della tassonomia sono già stati creati. Voglio impostare il termine tassonomia per un nodo a livello di codice .

Risposte:


17

Utilizzare questa funzione per ottenere l'ID da 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;
}

Mi piace la sua versatilità (l'altra parte), quindi aggiunge il termine.
Eduardo Chongkan,

15

Quando si crea un nodo a livello di codice, è possibile assegnarlo a qualsiasi termine come questo:

$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.Grazie. Funziona bene usando il termine id. Ma come impostare i nomi dei termini? è come $ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
Ranjani,

2
Qualcuno sa come taggare (programmaticamente) il nodo usando tassonomy termname invece di taxonomy id in drupal 7?
Ranjani,

@pretty Usa taxonomy_get_term_by_name per ottenere il termine oggetto e quindi usa la tid.
Lee Woodman,

2

È possibile utilizzare alcuni wrapper di metadati di entità per raggiungere questo obiettivo, ad esempio:

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 per l'utilizzo di EMW. Hanno anche un pratico metodo getIdentifier (), che è un passo in meno di $w_some_term->tid->value(). Ecco un ottimo articolo che mi ha aiutato a capire questo concetto molto meglio, e al quale mi riferisco regolarmente quando utilizzo gli EMW:
scotself

1

Quando ho aggiunto i termini, ho scoperto che dovevo aggiungere $ term-> parent = array (0) altrimenti la tabella taxonomy_term_hierarchy non viene aggiornata correttamente e i termini non vengono visualizzati nella pagina dell'elenco di amministratori per quel vocabolario

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.