Charger le terme par son nom

21

Dans Drupal 7, nous pouvons charger le terme en utilisant 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?

Amit Sharma
la source

Réponses:

19

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

?>
DRUPWAY
la source
Le billet de blog lié ne semble plus se charger. J'ai trouvé celui-ci qui peut être utile pour d'autres qui essaient de comprendre cela. btmash.com/article/2016-04-26/…
gcalex5
34

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]);
MrD
la source
2

Selon Renommé les fonctions de taxonomie qui sont retournés 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)par 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);
}

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

kiamlaluno
la source
0

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();
frazras
la source
0

Pour charger un ID de terme unique par nom de terme dans Drupal 8 -

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

Renuka Kulkarni
la source