私は語彙「病院」を作成し、次のようなテキストおよび画像フィールドを作成しました。
私のコードは:
$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()の呼び出し
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メソッドの詳細情報