web-dev-qa-db-fra.com

drupal 8 obtient la valeur du terme de taxonomie dans le nœud

Drupal\node\Entity\Node Object ([in_preview] => [values: protected] => Array ([vid] => Array ([x-default] => 1)

        [langcode] => Array
            (
                [x-default] => en
            )

        [field_destination] => Array
            (
                [x-default] => Array
                    (
                        [0] => Array
                            (
                                [target_id] => 2
                            )

                    )

            )

Impossible d'obtenir directement la valeur field_destination. C'est un terme de taxonomie attaché au type de contenu. Toute aide appréciée.

11
user32012

Pour s'appuyer sur VJamie's réponse.

Vous devrez soit définir une instruction d'utilisation en haut de votre script;

use Drupal\taxonomy\Entity\Term;

Ou, préfixez l'instance de classe avec l'espace de noms;

$term = \Drupal\taxonomy\Entity\Term::load($node->get('field_destination')->target_id);

Cela éliminera les fatals.

18
Christian

Vous pouvez également utiliser certaines méthodes de EntityReferenceFieldItemList: Obtient les entités référencées par ce champ, en préservant les deltas d'élément de champ:

$node->get('field_destination')->referencedEntities();

J'espère que cela vous sera utile

11
wau

Le code suivant vous fournira le terme d'objet dont vous avez besoin.

$term = Term::load($node->get('field_destination')->target_id);

Si vous avez besoin du nom de ce terme, vous pouvez procéder comme suit

$name = $term->getName();

J'espère que cela vous aidera!

9
VJamie

Faites ceci

use Drupal\taxonomy\Entity\Term;
$term = Term::load($node->get('field_destination')->target_id);
$termname = $term->getName();

Dans drupal8, nous suivions l'approche oops pour obtenir les valeurs.

1
vinay kumar

La propriété entity est accessible directement à partir de n'importe quel champ de type référence.

$node = 'myNode';
$termEntity = $node->get('field_taxonomy_reference')->entity;
if ($termEntity instanceof TermInterface) {
  $termLabel = $termEntity->label();
}
0
hugronaphor

C'est la bonne façon de le réaliser

use Drupal\taxonomy\Entity\Term;

function modulename_node_presave(Drupal\Core\Entity\EntityInterface $entity) {
    switch ($entity->bundle()) {
        case 'programs':
            $term = Term::load($entity->get('field_program_names')->target_id);
            $name = $term->getName();
            $entity->setTitle($name);
            break;
    }
}
0
Salman Haider