web-dev-qa-db-ja.com

分類用語のフィールド値を取得する方法

私は語彙「病院」を作成し、次のようなテキストおよび画像フィールドを作成しました。

  • 病院の画像:(マシン名:field_hospital_image)//画像フィールド
  • 病院の連絡先:(マシン名:field_hospital_contact_no_)//テキストフィールド

私のコードは:

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

名前空間も提案してください。

私はすでに試しました:

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

そして

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

エラー:

エラー:未定義のメソッドstdClass :: get()の呼び出し

1
A.Azmi

TermオブジェクトはloadTreeでロードされません。デフォルトでは、基本的なphpオブジェクトが代わりにロードされます。

$term_obj = Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($term->tid);を使用して、用語ごとに用語オブジェクトをロードする必要があります

コードは次のようになります

_$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,
  ];
} 
_

注:または、loadTree($vid, 0, NULL, TRUE)を使用して、_$terms_配列にエンティティを直接ロードすることもできますが、非常に大きな語彙では避けます。 loadTreeメソッドの詳細情報

3
GiorgosK