Bagaimana cara menetapkan istilah taksonomi secara terprogram untuk suatu simpul?

18

Saya membuat istilah taksonomi dan menugaskannya ke jenis konten ' Artikel ' menggunakan bidang referensi istilah. Saya membuat node secara terprogram tetapi bagaimana cara menetapkan istilah taksonomi untuk node?

Ketentuan taksonomi sudah dibuat. Saya ingin mengatur istilah taksonomi untuk sebuah node secara terprogram .

Ranjani
sumber

Jawaban:

17

Gunakan fungsi ini untuk mendapatkan ID dari 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
sumber
Saya suka fleksibilitasnya (bagian lain dari itu), jadi itu menambahkan istilah.
Eduardo Chongkan
15

Saat Anda membuat simpul secara terprogram, Anda dapat menetapkannya ke istilah apa pun seperti ini:

$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
sumber
1
@ neok.Terima kasih. Ini bekerja dengan baik menggunakan istilah id. Tapi bagaimana cara mengatur termnames? apakah itu seperti $ node-> field_yourfield_name [$ node-> language] [0] ['name'] = $ termname;
Ranjani
2
Adakah yang tahu cara menandai simpul (secara programatik) menggunakan taksonomi termname alih-alih taksonomi id di drupal 7?
Ranjani
@pretty Gunakan taxonomy_get_term_by_name untuk mendapatkan istilah objek dan kemudian gunakan tid.
Lee Woodman
2

Anda dapat menggunakan beberapa pembungkus metadata entitas untuk mencapai hal itu, misalnya:

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
sumber
1
+1 untuk menggunakan EMW. Mereka juga memiliki metode getIdentifier () yang berguna, yang merupakan satu langkah lebih sedikit daripada $w_some_term->tid->value(). Berikut ini adalah artikel yang bagus yang membantu saya memahami konsep ini jauh lebih baik, dan yang saya rujuk secara teratur ketika menggunakan EMW:
scotself
1

Saat menambahkan istilah, saya menemukan saya perlu menambahkan $ term-> parent = array (0) jika tidak, tabel taxonomy_term_hierarchy tidak diperbarui dengan benar, dan istilah itu tidak muncul di halaman daftar admin untuk kosakata itu

pengguna3425125
sumber