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 .

Ranjani
quelle

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;
}
Mist
quelle
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);
Petro Popelyshko
quelle
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);
}
Kenorb
quelle
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

user3425125
quelle