it-swarm.com.de

So erhalten Sie Taxonomiebegriffsfeldwerte

Ich habe den Wortschatz "Krankenhaus" erstellt und Text- und Bildfelder erstellt wie:

  • Krankenhausbild: (Maschinenname: field_hospital_image) // Bildfeld
  • Krankenhauskontakt: (Maschinenname: field_hospital_contact_no_) // Textfeld

Mein Code lautet:

$vid = 'hospitals';
$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid);
foreach ($terms as $term) {
  $term_data[] = [
    'tid' => $term->tid,
    'tname' => $term->name,
    'image' => ...???..,    // image field
    'contact' => ...???..,  // text field
  ];
}

Bitte schlagen Sie auch einen Namespace vor.

Ich habe auch schon versucht:

'contact' => $term->get('field_hospital_contact_no_')->getValue(),

und

'contact' => $term->get('field_hospital_contact_no_')->value,

Fehler:

Fehler: Aufruf der undefinierten Methode stdClass :: get ()

1
A.Azmi

Termobjekt wird nicht mit loadTree geladen. Standardmäßig wird stattdessen ein grundlegendes PHP-Objekt geladen.

Sie müssen das Termobjekt für jeden Term mit $term_obj = Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($term->tid); laden

Ihr Code sollte so aussehen

$vid = 'hospital';
$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid);
foreach ($terms as $term) {
  $term_obj = Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($term->tid);
  $url = "";
  if(isset($term_obj->get('field_hospital_image')->entity)){
    $url = file_create_url($term_obj->get('field_hospital_image')->entity->getFileUri());
  }

  $term_data[] = [
    'tid' => $term->tid,
    'tname' => $term->name,
    'contact' => $term_obj->get('field_hospital_contact_no_')->value,
    'image_url' => $url,
  ];
} 

HINWEIS: Alternativ können Sie auch loadTree($vid, 0, NULL, TRUE) verwenden, um die Entitäten direkt in das Array $terms Zu laden, aber vielleicht sollte es so sein bei sehr großen Vokabeln vermieden werden. Weitere Informationen zur loadTree-Methode

3
GiorgosK