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?
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:
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;
}
?>
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]);
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.
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();