Mendapatkan nilai bidang dari suatu entitas


11

Apa yang saya instal di situs saya adalah modul Entity API dan Entityform. Modul Entityform memungkinkan saya untuk membuat formulir yang dapat dikirimkan oleh pengguna mana pun dan bidang formulir tersedia untuk saya gunakan dalam tampilan, mirip dengan cara kerja jenis konten.

Biasanya untuk menarik nilai bidang dari sebuah node ke template saya dengan php saya akan melakukan hal berikut:

<?php echo $node->field_name[$node->language][0]['value']; ?>

Namun ini tidak berfungsi dengan bentuk entitas / entitas.

Apakah ada yang tahu cara untuk melakukan ini untuk bidang dalam formulir entitas? Beberapa orang menyarankan untuk menggunakan fungsi devel dan dpm () tapi saya tidak tahu bagaimana menggunakannya.

Beberapa contoh spesifik tentang bagaimana saya bisa mendapatkan nilai bidang ini akan sangat membantu saya.

Jawaban:


13

Sudahkah Anda mencoba mengakses nilai dengan entitas_metadata_wrapper ?

$entityform_id = 12; // entity form id
$entityform = entityform_load($entityform_id);
$entityform_wrapper = entity_metadata_wrapper('entityform', $entityform);
// Access fields with $entityform_wrapper->field_name->value() or ->field_name->raw()
drupal_set_message($entityform_wrapper->field_my_field->value()); // for example

4
Catatan untuk pembaca di masa mendatang: Ini benar, tetapi untuk mengakses bidang entitas tidak perlu menginstal modul API Entitas; Inti Drupal sudah memiliki fungsi untuk mengakses bidang entitas.
kiamlaluno

Ya, tetapi OP memberi tag dan menentukan bahwa mereka telah menginstal modul Entity API, karenanya entitas_metadata_wrapper, lebih jauh lagi, ini adalah ketergantungan modul entitas entitas.
David Thomas

2
entitas-api adalah tag untuk API Entitas yang diterapkan dari Drupal 7, bukan untuk modul API Entitas. Catatan ini untuk menghindari pengembang pemula berpikir modul API Entitas diperlukan untuk menangani entitas. Saya tidak mengatakan jawabannya tidak benar. :)
kiamlaluno

7

Tanpa menggunakan modul Entity API, untuk mendapatkan nilai bidang yang dikaitkan dengan entitas, Anda menggunakan field_get_items () ; Anda baru saja melewati jenis entitas, objek entitas, dan nama bidang.

Misalnya, untuk mendapatkan isi komentar, Anda menggunakan kode berikut.

if ($items = field_get_items('comment', $comment, 'comment_body')) {
  // ...
}

Untuk mendapatkan tubuh simpul, Anda bisa menggunakan kode berikut.

if ($items = field_get_items('node', $node, 'body')) {
  // ...
}

Objek entitas adalah objek yang dikembalikan dari entity_load () , atau fungsi pemuatan khusus untuk entitas itu, seperti node_load () , comment_load () , atau taxonomy_term_load () . Di Drupal 8, fungsi-fungsi itu untuk pembungkus entity_load().

Jika Anda ingin menampilkan konten bidang, maka Anda harus menggunakan field_view_field () .


0

Anda biasanya dapat memperoleh properti $ node karena Anda atau beberapa kode yang Anda gunakan memanggil node_load () sebelumnya.

Anda perlu memuat entitas sepenuhnya sebelum Anda bisa mendapatkan properti itu.

Gunakan entity_load () http://api.drupal.org/api/drupal/includes%21common.inc/function/entity_load/7

Maka Anda benar-benar akan memiliki objek entitas yang dimuat yang bisa Anda dapatkan di bidang.

Menggunakan dpm () sama dengan fungsi lainnya, Anda hanya perlu menginstal modul devel.

Jadi, lakukan sesuatu seperti ini:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>

0

Mencoba:

$value= field_get_items('entityform', $entityform, 'field_myfieldname');
print '<p>the value is: '.$value.'</p>';

Ini harus mencetak nilai bidang.

Jika sebuah array coba ini:

$values = field_get_items('entityform', $entityform, 'field_myfieldname');
$value = $values[0]['value'];
print '<p>the value is: '.$value.'</p>';

Ingat bahwa ini adalah output mentah dan, tergantung dari mana nilai tersebut berasal, Anda mungkin harus membersihkan nilai secara manual di sini.

Lihat: function field_get_items


0

Tempatkan ini di dalam salah satu modul Anda dan buka halaman formulir dan Anda akan menemukan info yang Anda cari.

function yourmodulename_form_alter(&$form, &$form_state, $form_id) {

  dpm($form);

}

-1

Daripada menggunakan dpm dan menginstal modul itu saya menggunakan:

print_r('<pre>');
print_r($node);
print_r('</pre>');

Semoga ini akan membantu Anda menggali nilainya.


Hmmm, itu tidak menghasilkan apa-apa untuk saya :( Mungkinkah karena saya melihat pengiriman entitasform, dan bukan node? Atau apakah pengiriman entitasform benar-benar menjadi node? Jadi bingung.
Dustin

Saya tidak yakin kemudian, saya akan berasumsi bahwa Anda akan memerlukan variabel lain selain $ node.
Brian

1
Pertanyaannya adalah tentang mengakses suatu bidang suatu entitas, bukan bagaimana cara mencetak entitas tersebut.
kiamlaluno
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.