Trong Drupal 7, chúng ta có thể tải thuật ngữ sử dụng tên cho ex. taxonomy_get_term_by_name($name)
Có cách nào để tải thuật ngữ thông qua tên đã cho trong Drupal 8 không?
Trong Drupal 7, chúng ta có thể tải thuật ngữ sử dụng tên cho ex. taxonomy_get_term_by_name($name)
Có cách nào để tải thuật ngữ thông qua tên đã cho trong Drupal 8 không?
Câu trả lời:
Chức năng này dường như không được dùng trong Drupal 8. Thay vào đó, hãy
sử dụng hàm taxonomy_term_load_mult Môn_by_name .
Thí dụ
<?php
/**
* Utility: find term by name and vid.
* @param null $name
* Term name
* @param null $vid
* Term vid
* @return int
* Term id or 0 if none.
*/
protected function getTidByName($name = NULL, $vid = NULL) {
$properties = [];
if (!empty($name)) {
$properties['name'] = $name;
}
if (!empty($vid)) {
$properties['vid'] = $vid;
}
$terms = \Drupal::entityManager()->getStorage('taxonomy_term')->loadByProperties($properties);
$term = reset($terms);
return !empty($term) ? $term->id() : 0;
}
?>
Bạn có thể sử dụng mã đoạn mã như bằng cách sử dụng entityTypeManager :
$term_name = 'Term Name';
$term = \Drupal::entityTypeManager()
->getStorage('taxonomy_term')
->loadByProperties(['name' => $term_name]);
Theo Đổi tên các chức năng phân loại trả về nhiều giá trị , taxonomy_get_term_by_name($name, $vocabulary = NULL)
đã được đổi tên taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL)
. Nếu bạn nhìn vào mã của hàm thứ nhất và bạn so sánh nó với mã của hàm thứ hai, bạn sẽ thấy rằng sự khác biệt có liên quan nhất là đã thay thế cuộc gọi thành taxonomy_term_load_multiple(array(), $conditions)
cuộc gọi đến entity_load_multiple_by_properties('taxonomy_term', $values)
.
// Drupal 7
function taxonomy_get_term_by_name($name, $vocabulary = NULL) {
$conditions = array('name' => trim($name));
if (isset($vocabulary)) {
$vocabularies = taxonomy_vocabulary_get_names();
if (isset($vocabularies[$vocabulary])) {
$conditions['vid'] = $vocabularies[$vocabulary]->vid;
}
else {
// Return an empty array when filtering by a non-existing vocabulary.
return array();
}
}
return taxonomy_term_load_multiple(array(), $conditions);
}
// Drupal 8
function taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) {
$values = array('name' => trim($name));
if (isset($vocabulary)) {
$vocabularies = taxonomy_vocabulary_get_names();
if (isset($vocabularies[$vocabulary])) {
$values['vid'] = $vocabulary;
}
else {
// Return an empty array when filtering by a non-existing vocabulary.
return array();
}
}
return entity_load_multiple_by_properties('taxonomy_term', $values);
}
Vì taxonomy_term_load_multiple_by_name()
chưa được đánh dấu là không dùng nữa, bạn vẫn có thể sử dụng chức năng đó nơi bạn đã từng sử dụng taxonomy_get_term_by_name()
. Cả hai đều yêu cầu các đối số giống nhau, vì vậy chuyển đổi mã cho Drupal 7 trong mã cho Drupal 8, trong trường hợp này, chỉ là vấn đề thay thế tên hàm.
Để tải ID thuật ngữ đơn theo tên thuật ngữ trong Drupal 8 -
$term = \Drupal::entityTypeManager() ->getStorage('taxonomy_term') ->loadByProperties(['name' => $term_name, 'vid' => 'job_category']); $term = reset($term); $term_id = $term->id();