web-dev-qa-db-fra.com

Charger le terme par son nom

Dans Drupal 7, nous pouvons charger le terme en utilisant le nom pour ex. taxonomy_get_term_by_name($name)

Existe-t-il un moyen de charger le terme via un prénom dans Drupal 8?

21
Amit Sharma

Cette fonctionnalité semble être obsolète dans Drupal 8.
Utilisez plutôt la fonction taxonomy_term_load_multiple_by_name .

Exemple

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

?>
19
DRUPWAY

Vous pouvez utiliser le code d'extrait comme en utilisant entityTypeManager :

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

Selon renommé les fonctions de taxonomie qui ont renvoyé plusieurs valeurs , taxonomy_get_term_by_name($name, $vocabulary = NULL) a été renommé taxonomy_term_load_multiple_by_name($name, $vocabulary = NULL) . Si vous regardez le code de la première fonction et que vous le comparez avec le code de la deuxième fonction, vous remarquerez que la différence la plus pertinente est d'avoir remplacé l'appel à taxonomy_term_load_multiple(array(), $conditions) avec l'appel à 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);
}

Puisque taxonomy_term_load_multiple_by_name() n'a pas été marqué comme obsolète, vous pouvez toujours utiliser cette fonction là où vous utilisiez taxonomy_get_term_by_name(). Ils nécessitent tous les deux les mêmes arguments, donc la conversion du code pour Drupal 7 dans le code pour Drupal 8, dans ce cas, est juste une question de remplacement du nom de la fonction).

2
kiamlaluno

Pour charger un ID de terme unique par nom de terme et vocabulaire dans Drupal 8, vous pouvez utiliser l'extrait de code suivant.

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

Vous pouvez également utiliser des requêtes de champ d'entité pour charger par champs sur le terme

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