Làm cách nào để đặt thuật ngữ phân loại theo chương trình cho một nút?


18

Tôi đã tạo các thuật ngữ phân loại và gán nó cho loại nội dung ' Bài viết ' sử dụng trường tham chiếu thuật ngữ. Tôi đã tạo các nút bằng cách lập trình nhưng làm thế nào để thiết lập các thuật ngữ phân loại cho các nút?

Các điều khoản phân loại đã được tạo ra. Tôi muốn đặt thuật ngữ phân loại cho một nút theo chương trình .

Câu trả lời:


17

Sử dụng chức năng này để lấy ID từ 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;
}

Tôi thích tính linh hoạt của nó (phần khác của nó), vì vậy nó thêm thuật ngữ này.
Eduardo Chongkan

15

Khi bạn tạo một nút theo chương trình, bạn có thể gán nó cho bất kỳ thuật ngữ nào như thế này:

$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. Nó hoạt động tốt khi sử dụng thuật ngữ id. Nhưng làm thế nào để đặt tên? giống như $ node-> field_yourfield_name [$ node-> ngôn ngữ] [0] ['name'] = $ termname;
Ranigate

2
Bất cứ ai cũng biết cách gắn thẻ nút (theo chương trình) bằng cách sử dụng tên phân loại thay vì id phân loại trong drupal 7?
Ranigate

@pretty Sử dụng taxonomy_get_term_by_name để lấy đối tượng hạn và sau đó sử dụng tid.
Lee Woodman

2

Bạn có thể sử dụng một số trình bao bọc siêu dữ liệu thực thể để đạt được điều đó, ví dụ:

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 để sử dụng EMWs. Họ cũng có một phương thức tiện dụng getIdentifier (), đó là một bước ít hơn $w_some_term->tid->value(). Đây là một bài viết tuyệt vời giúp tôi hiểu khái niệm này tốt hơn rất nhiều và tôi thường xuyên tham khảo khi sử dụng EMWs:
scotself

1

Khi thêm các thuật ngữ, tôi thấy tôi cần thêm $ term-> Parent = mảng (0) nếu không bảng taxonomy_term_hierarchy không được cập nhật đúng và các thuật ngữ không hiển thị trong trang danh sách quản trị viên cho từ vựng đó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.