Tải thuật ngữ theo tên


21

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:


19

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ài đăng trên blog được liên kết dường như không tải nữa. Tìm thấy cái này có thể hữu ích cho những người khác đang cố gắng tìm ra điều này. btmash.com/article/2016-04-26/ đá
gcalex5

34

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]);

2

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);
}

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.


0

Bạn cũng có thể sử dụng các truy vấn trường thực thể để tải theo các trường về thuật ngữ

$result = \Drupal::entityQuery('taxonomy_term')
          ->condition('field_my_field_name', 'Whatever Value')
          ->execute();

0

Để 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();

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.