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?

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

?>

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

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.


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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.