Je voulais récupérer des termes de taxonomie à partir d'un certain vocabulaire dans Drupal 8.
Apparemment, je peux toujours le faire en utilisant taxonomy_get_tree
mais c'est obsolète.
Je dois maintenant utiliser TermStorageInterface :: loadTree
J'essaie d'accéder à cette fonction à partir d'un Block
mais je ne comprends pas comment instancier la TermStorageInterface
classe.
J'ai essayé d'accéder directement à la fonction mais ce n'est pas une fonction statique:
TermStorageInterface::loadTree('categories')
J'ai essayé d'instancier la classe mais ça m'a dit Cannot instantiate interface Drupal\taxonomy\TermStorageInterface
$test = new TermStorageInterface();
Je ne comprends pas comment cette classe fonctionne et comment je peux accéder aux liens de taxonomie. Je pense que je manque une grande partie de la compréhension du fonctionnement de Drupal.
la source
Voici ce que j'utilise pour créer une liste de balises:
la source
L'erreur que vous obtenez est parce que vous essayez de créer une instance d'une interface, ce que PHP ne permet pas. Les interfaces PHP décrivent les méthodes que les classes doivent implémenter pour des cas spécifiques, mais elles ne peuvent pas être utilisées pour créer un objet, par exemple avec
new InterfaceName()
.Maintenant que cela
taxonomy_get_tree()
a été supprimé et que le service de gestion d'entités est obsolète, vous devez utiliser le code suivant.Il n'est pas nécessaire d'utiliser
\Drupal::getContainer()
car\Drupal
expose une méthode d'assistance pour obtenir le service de gestionnaire de type d'entité.la source
Charger en utilisant le nom de machine du vocabulaire (vid):
la source
\ Drupal :: entityManager () est maintenant obsolète, donc cela a fonctionné pour moi
la source
Je viens d'écrire une fonction, n'hésitez pas à l'éditer et à l'utiliser :) J'avais besoin de l'id du terme, mais vous pouvez retourner ce que vous voulez.
la source
$query->condition
après$query->execute()
n'a aucun effet. De plus, si le premier terme n'est pas le bon, foreach renverra null plutôt que de vérifier le terme suivant. (Pour votre cas d'utilisation, vous pourrez peut-être utiliser taxonomy_term_load_multiple_by_name à la place?)Voici l'exemple D8 comment accéder aux termes de taxonomie basés sur le nom de la machine à vocabulaire:
Pour charger l'ensemble des entités, utilisez:
loadTree('categories', 0, NULL, TRUE)
.la source
Si vous avez besoin d'une entité de terme, vous pouvez utiliser 'loadByProperties ()'.
la source
la source
Vous pouvez voir la description complète ici https://drupaltreasure.blogspot.com/2017/04/drupal-8-get-list-of-all-voacbs.html
la source