Bagaimana cara membuat nilai bidang termasuk formatnya?

9

Saya membaca nilai bidang dan formatnya dari database. Bagaimana saya membuat nilai itu dengan format?

Sesuatu Di
sumber

Jawaban:

36

Meskipun Anda bisa menghabiskan banyak waktu untuk membedah cara kerja API Bidang, Anda benar-benar harus menggunakan API Lapangan secara langsung untuk merender konten bidang alih-alih meminta sendiri database. Ada banyak enkapsulasi dan abstraksi yang ditambahkan ke bidang yang akan membangkitkan Dewa Lama jika dilewati.

Menggunakan API Bidang, jika Anda ingin seluruh bidang yang diformat, lengkap dengan label dan semua nilai, Anda ingin menggunakan field_view_field():

$nid = 1;
$node = node_load($nid);
$output = field_view_field('node', $node, 'field_foo');

// $output is a render array, so it needs to be rendered first
print render($output);

Jika Anda hanya ingin menampilkan nilai yang diformat dari satu item dalam suatu bidang, Anda perlu menggunakannya field_view_value(), yang sedikit lebih terlibat:

// Must load field content for entity before using field_view_value()
$fields = field_get_items('node', $node, 'field_foo');

// $index corresponds to the value you want to render. First value = 0.
$index = 0;
$output = field_view_value('node', $node, 'field_foo', $fields[$index]);

print render($output);

Jika Anda ingin menggunakan formatter selain dari standar yang ditentukan untuk instance bidang, kirimkan menggunakan $displayparameter di salah satu field_view_field()atau field_view_value():

$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);

sumber
The $index (parameter ketiga dari field_view_value ()) adalah $ delta. Pada bidang nilai tunggal ini akan menjadi 0. Jadi, Anda dapat menggunakan $output = field_view_value('node', $node, 'field_foo', $fields[0]);atau$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
johirpro
0

dengan memeriksa api, saya pikir Anda mencari ini. (Lagi pula saya belum menguji kodenya)

$the_field = field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL);

// render the field
drupal_render($the_field);

perbarui: jawaban duplikat, mungkin hapus saja saya. jawaban lain diposting saat saya menulis jawaban ini.

gilzero
sumber
0

Jika Anda menggunakan modul Custom Formatters jangan lupa menambahkan awalan 'custom_formatters_' sebelum nama mashine formatter Anda seperti ini:

$display = array('type' => 'custom_formatters_my_formatter');
Dmitry
sumber
0

Sepertinya Anda juga dapat mengedit file templat untuk menyesuaikan cara output ini secara semantik:

1) Siapkan fomat tanggal khusus dan berikan nama mesin seperti "short_date_only" atau apalah. 2) Konfigurasikan opsi tampilan untuk jenis konten untuk menggunakan format itu 3) Ganti template bidang ke sesuatu seperti bidang - field_date_custom-content_type.tpl

Daniel
sumber