Wie programmiere ich einen Taxonomiebegriff für einen Knoten?


18

Ich habe Taxonomiebegriffe erstellt und sie mithilfe des Begriffsverweisfelds einem Inhaltstyp " Artikel " zugewiesen . Ich habe Knoten programmgesteuert erstellt, aber wie werden Taxonomiebegriffe für die Knoten festgelegt?

Die Taxonomiebegriffe sind bereits angelegt. Ich möchte den Taxonomiebegriff für einen Knoten programmgesteuert festlegen .

Antworten:


17

Verwenden Sie diese Funktion, um die ID von Termname abzurufen

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;
}

Ich mag seine Vielseitigkeit (der andere Teil davon), also fügt er den Begriff hinzu.
— Eduardo Chongkan

15

Wenn Sie einen Knoten programmgesteuert erstellen, können Sie ihn einem beliebigen Begriff wie dem folgenden zuweisen:

$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.It funktioniert gut mit Term-ID. Aber wie man Termnamen setzt? ist das wie $ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
— Ranjani

2
Weiß jemand, wie man Knoten (programmgesteuert) mit dem Taxonomie-Termnamen anstelle der Taxonomie-ID in Drupal 7 markiert?
— Ranjani

@pretty Verwenden Sie taxonomy_get_term_by_name, um den Begriff object abzurufen, und verwenden Sie dann die tid.
— Lee Woodman

2

Sie können einige Entity-Metadaten-Wrapper verwenden , um dies zu erreichen, z.

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 für die Verwendung von EMWs. Sie haben auch eine praktische Methode getIdentifier (), die einen Schritt weniger ist als $w_some_term->tid->value(). Hier ist ein großartiger Artikel , der mir geholfen hat, dieses Konzept besser zu verstehen, und auf den ich mich regelmäßig beziehe, wenn ich EMWs verwende:
— scotself

1

Beim Hinzufügen von Begriffen musste $ term-> parent = array (0) hinzugefügt werden, da sonst die taxonomy_term_hierarchy-Tabelle nicht ordnungsgemäß aktualisiert wird und die Begriffe nicht auf der Verwaltungslistenseite für dieses Vokabular angezeigt werden

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.