Làm thế nào để có được tên thuật ngữ phân loại từ tid?


32

Rất nhiều thứ của chúng tôi có uris được định dạng như thế site/taxonomy/XX, trong đó XX là một số nguyên.

Tôi đã tìm thấy rất nhiều câu hỏi như " làm thế nào để lấy TID từ tên? ", Nhưng tôi muốn lấy tên từ TID. Tôi đang cố gắng kết hợp một kịch bản vụn bánh mì và mọi thứ đều tuyệt vời ngoại trừ những trường hợp tôi nhận được một dấu vết như " home > term". Thay vào đó tôi muốn có nó như " home > <TERM NAME>".

Làm thế nào tôi có thể làm như vậy?


Câu trả lời tuyệt vời. Chỉ dành cho thông tin: Đối với những người muốn làm điều ngược lại - tức là nhận được từ tên thuật ngữ, cũng có một câu hỏi và trả lời : drupal.stackexchange.com/questions / 5959 / / Hy vọng điều này hữu ích khi Công cụ tìm kiếm khi tìm câu trả lời dường như không hiểu thứ tự của những gì người ta cần theo nghĩa 'từ' và 'đến'.
trị liệu

Câu trả lời:


92

Nếu bạn đang sử dụng Drupal 7, bạn có thể sử dụng taxonomy_term_load()

$term = taxonomy_term_load($tid);
$name = $term->name;

Nếu bạn có một loạt ID hạn, bạn có thể lưu phải chạy một truy vấn duy nhất cho mỗi lần tải bằng cách sử dụng taxonomy_term_load_multiple():

$tids = array(1, 2, 3);
$terms = taxonomy_term_load_multiple($tids);

foreach ($terms as $term) {
  $name = $term->name;
}

Nếu bạn bị kẹt khi sử dụng Drupal 6, bạn có thể sử dụng taxonomy_get_term():

$term = taxonomy_get_term($tid);
$name = $term->name;

Không có tùy chọn đa tải cho Drupal 6 mà tôi không may biết.


cảm ơn bạn rất nhiều mong muốn tôi có thể cộng thêm cho hỗ trợ phiên bản: D
Brodie

Câu hỏi bổ sung: Tôi nghĩ rằng điều này dọc theo cùng một dòng, có dễ đặt nó không để các url đọc trang web / <tên thuật ngữ>? hoặc tôi sẽ phải thiết lập điều đó cho mỗi thuật ngữ cá nhân?
Brodie

3
Bạn có thể làm điều đó trên cơ sở theo kỳ hạn nhưng điều đó khá tốn công. Các mô-đun pathauto được viết chỉ dành riêng cho loại tình huống này, bạn có thể sử dụng nó để xác định mô hình để bí danh tự động gán các điều khoản / content / người sử dụng / etc.
Clive

5

Hàm sau trả về tên của thuật ngữ phân loại dựa trên dữ liệu của nó:

function get_term($tid) {
  return db_select('taxonomy_term_data', 't')
  ->fields('t', array('name'))
  ->condition('tid', $tid)
  ->execute()
  ->fetchField();
}

1
Không nên sử dụng các chức năng cơ sở dữ liệu khi bạn có thể đạt được điều tương tự với chức năng API.
Kartagis

4
Trong một số trường hợp, tốt hơn là sử dụng chức năng cơ sở dữ liệu vì các hàm API tải một khối lượng dữ liệu lớn
houmem

Cũng hữu ích khi các mô-đun cấp phép truy cập phân loại hạn chế quyền truy cập
Kích thước

5

Trong Drupal 8, bạn có thể lấy tên của thuật ngữ phân loại theo cách này:

$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($tid);

$name = $term->label();

Hoặc để tải nhiều:

$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadMultiple($tids);

foreach($terms as $term) {
  $name = $term->label();
}

Tôi gặp lỗi này - Lưu ý: Thuộc tính không xác định: Drupal \ Core \ Entity \ Plugin \ DataType \ EntityReference :: $ target
Diana

1

Dành cho D7:

$term = taxonomy_get_term_by_name($term_name, $vocab_name);  
  foreach($term as $key => $data) {  
    $tid = $data->tid;  

    dpm($tid);  

  }  

Dành cho D8:

$term_name = \Drupal\taxonomy\Entity\Term::load(2)->get('name')->value;  
dpm($term_name);  

0

Có thể lấy tên của thuật ngữ trong Drupal 8 theo cách sau:

//Obtain the term.
$tid=1;
$term= taxonomy_term_load($tid);

//get the field name
$term->label();

//or
$term->get('name')->value;
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.