이름으로 용어로드


21

Drupal 7에서 ex라는 이름을 사용하여 용어를로드 할 수 있습니다. taxonomy_get_term_by_name($name)

Drupal 8에서 이름을 통해 용어를로드하는 방법이 있습니까?

답변:


19

이 기능은 Drupal 8에서 더 이상 사용되지 않는 것 같습니다. taxonomy_term_load_multiple_by_name 함수를 대신
사용하십시오 .

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

?>

연결된 블로그 게시물이 더 이상로드되지 않는 것 같습니다. 이것을 알아 내려고 노력하는 다른 사람들에게 도움이 될 수있는 것을 발견했습니다. btmash.com/article/2016-04-26/…
gcalex5

34

entityTypeManager 를 사용하여 스 니펫 코드를 사용할 수 있습니다 .

$term_name = 'Term Name';
$term = \Drupal::entityTypeManager()
      ->getStorage('taxonomy_term')
      ->loadByProperties(['name' => $term_name]);

2

에 따라 여러 값을 반환 분류 기능을 명칭 변경 , taxonomy_get_term_by_name($name, $vocabulary = NULL)이름이 변경되었습니다 taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL). 첫 번째 함수의 코드를보고 두 번째 함수의 코드와 비교하면 가장 관련성이 높은 차이점이 호출을 호출로 대체 한 taxonomy_term_load_multiple(array(), $conditions)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()더 이상 사용되지 않는 것으로 표시되지 않았 으므로 사용했던 위치에서 해당 기능을 계속 사용할 수 있습니다 taxonomy_get_term_by_name(). 둘 다 동일한 인수가 필요하므로 Drupal 8 코드에서 Drupal 7 코드를 변환하는 것은 함수 이름을 바꾸는 것입니다.


0

항목 필드 조회를 사용하여 용어의 필드별로로드 할 수도 있습니다.

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

0

Drupal 8에서 용어 이름별로 단일 용어 ID를로드하려면-

$term = \Drupal::entityTypeManager() ->getStorage('taxonomy_term') ->loadByProperties(['name' => $term_name, 'vid' => 'job_category']); $term = reset($term); $term_id = $term->id();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.