Jak ustawić termin taksonomii programowo dla węzła?

18

Utworzyłem terminy taksonomiczne i przypisałem je do typu treści „ Artykuł ”, korzystając z pola referencyjnego terminu. Utworzyłem węzły programowo, ale jak ustawić warunki taksonomiczne dla węzłów?

Warunki taksonomii zostały już utworzone. Chcę ustawić programowo termin taksonomii dla węzła .

Ranjani
źródło

Odpowiedzi:

17

Użyj tej funkcji, aby uzyskać identyfikator z 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;
}
cholera
źródło
Podoba mi się jego wszechstronność (inna część), więc dodaje termin.
Eduardo Chongkan,
15

Tworząc programowo węzeł, możesz przypisać go do dowolnego terminu takiego jak ten:

$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
źródło
1
@ neok.Thanks.To działa dobrze, używając terminu id.Ale jak ustawić termnames? to jest jak $ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
Ranjani
2
Czy ktoś wie, jak otagować węzeł (programowo) przy użyciu nazwy termonomii zamiast identyfikatora systematyki w programie Drupal 7?
Ranjani,
@pretty Użyj taxonomy_get_term_by_name, aby uzyskać termin obiekt, a następnie użyj tid.
Lee Woodman
2

Aby to osiągnąć, możesz użyć niektórych opakowań metadanych encji , np .:

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
źródło
1
+1 za korzystanie z EMW. Mają też przydatną metodę getIdentifier (), która jest o jeden krok mniejsza niż $w_some_term->tid->value(). Oto świetny artykuł, który pomógł mi lepiej zrozumieć tę koncepcję i do którego regularnie się odnoszę podczas korzystania z EMW:
scotself
1

Podczas dodawania terminów stwierdziłem, że muszę dodać $ term-> rodzic = tablica (0), w przeciwnym razie tabela taksonomii_term_hierarchia nie zostanie poprawnie zaktualizowana, a warunki nie będą wyświetlane na stronie listy administratorów dla tego słownictwa

użytkownik3425125
źródło