Làm cách nào để có được ID thuật ngữ phân loại từ tên của nó?


Câu trả lời:


14

Đó là taxonomy_get_term_by_name () mà bạn sử dụng như trong đoạn mã sau.

$term_array = taxonomy_get_term_by_name('Foo');
$term = reset($term_array); # get the first element of the array which is our term object
print $term->name;

1
Điều đó dường như cho tôi một mảng chứ không phải là TID. $foo[0]->tidkhông làm gì cả vì nó trả về một mảng được khóa bằng TID. Vì vậy, để có được TID, tôi cần TID hoặc thực hiện foreach()mặc dù chỉ trên một mặt hàng? Mặt khác:Undefined offset: 0
beth

3
Nó trả về một mảng vì không có gì ngăn cản nhiều thuật ngữ có cùng tên. Bạn không thể biết đó chỉ là một mặt hàng.
Letharion

2
@beth, hoặc sử dụng tham số thứ hai để giới hạn một từ vựng cụ thể, hoặc lặp lại foreach ($terms as $term)và kiểm tra $term->vidđể đảm bảo bạn có từ đúng.
mpdon Arena

Tôi vừa nhanh chóng gõ vào phiên bản D6 mà tôi đã quen. Bây giờ tôi thấy từ các liên kết / url của bạn bao gồm rằng bạn đang chạy D7. Các ý kiến ​​trên nên làm rõ mọi thứ cho bạn.
Jimajamma

22

taxonomy_get_term_by_name() sẽ thực hiện các mẹo:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}

4
Ngoài ra còn có một đối số thứ hai đã được thêm vào Drupal 7 để giới hạn điều này trong một từ vựng cụ thể. Điều này giúp loại bỏ sự cần thiết phải lặp qua các kết quả để tìm thuật ngữ bạn muốn khi bạn có thể có nhiều mức chia sẻ cùng tên.
mpdon Arena

2
Thiếu dấu chấm phẩy trong dòng$first_term = array_shift($terms);
Kevin Siji

1

Chức năng này làm việc cho tôi:

/**
 * Return the term id for a given term name.
 */
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;
}

Nếu bạn đang sử dụng một từ vựng khác (khác với Thẻ), thì hãy sửa đổi trong mã phía trên dòng:

$vocabulary = 'tags';
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.