Bagaimana cara mengakses nilai bidang dalam variabel $ baris dalam templat tema tampilan bidang?

11

Saya mengganti templat bidang untuk salah satu tampilan saya dan saya ingin dapat mengakses nilai bidang lain dari variabel $ row. Dokumentasi pada file templat menunjukkan ini:

Saat mengambil output dari $ row, konstruk ini harus digunakan: $ data = $ row -> {$ field-> field_alias}

Bidang saya disebut field_calendar_title, tetapi yang berikut ini tidak berfungsi seperti yang diharapkan:

$row->{$field->field_calendar_title}

Saya mendapatkan kesalahan berikut:

Kesalahan fatal: Tidak dapat mengakses properti kosong ...

Apakah bidang "alias" berbeda dari nama bidang dalam jenis konten?

Output "Dibersihkan" dari var_dump dari $ row:

stdClass Object
(
    [node_title] => ...
    [nid] => 568
    [field_data_field_performance_date_delta] => 0
    [field_data_field_performance_date_language] => und
    [field_data_field_performance_date_bundle] => event
    [field_data_field_performance_date_field_performance_date_val] => 2012-03-02 19:00:00
    [field_data_field_performance_date_node_entity_type] => node
    [_field_data] => Array
        (
            [nid] => Array
                (
                    [entity_type] => node
                    [entity] => stdClass Object
                        (
                            [vid] => 878
                            [uid] => 0
                            [title] => ...
                            [log] => 
                            [status] => 1
                            [comment] => 0
                            [promote] => 0
                            [sticky] => 0
                            [nid] => 568
                            [type] => event
                            [language] => und
                            [created] => 1329332968
                            [changed] => 1331836509
                            [tnid] => 0
                            [translate] => 0
                            [revision_timestamp] => 1331836509
                            [revision_uid] => 1
                            [body] => Array
                                (
                                    [und] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [value] => ...
                                                    [summary] => ...
                                                    [safe_summary] => ...
                                                )
                                        )
                                )
                                [field_resident_company] => Array ( [und] => Array ( [0] => Array ( [tid] => 3 ) ) )
                                [field_series] => Array ( [und] => Array ( [0] => Array ( [tid] => 36 ) ) )
                                [field_venue] => Array ( )
                                [field_rotator_image] => Array ( )
                                [field_exclude] => Array ( [und] => Array ( [0] => Array ( [value] => 0 ) ) )
                                [field_performance_image] => Array ( )
                                [field_premiere] => Array ( [und] => Array ( [0] => Array ( [value] => 1330714800 [timezone] => UTC [timezone_db] => UTC [date_type] => datestamp ) ) )
                                [field_closing] => Array ( [und] => Array ( [0] => Array ( [value] => 1330714800 [timezone] => UTC [timezone_db] => UTC [date_type] => datestamp ) ) )
                                [field_exclude_update] => Array ( [und] => Array ( [0] => Array ( [value] => 0 ) ) )
                                [field_performance_date] => Array ( [und] => Array ( [0] => Array ( [value] => 2012-03-02 19:00:00 [timezone] => UTC [timezone_db] => UTC [date_type] => datetime ) ) )
                                [field_performance_id] => Array ( [und] => Array ( [0] => Array ( [value] => 1436 [format] => [safe_value] => 1436 ) ) ) [field_event_status] => Array ( [und] => Array ( [0] => Array ( [value] => open ) ) )
                                [field_calendar_title] => Array ( [und] => Array ( [0] => Array ( [value] => PSYCHIC EXP [format] => [safe_value] => PSYCHIC EXP ) ) )
                                ...
                        )
) 
Sesuatu Di
sumber

Jawaban:

10

Dari penampilan var_dumpAnda harus dapat menemukan nilai bidang Anda dengan ini:

$row->_field_data['nid']['entity']->field_calendar_title['und'][0]['value'];

Saya sangat berharap ada cara yang lebih baik dari itu!

Clive
sumber
Maaf saya mengoreksi sintaks dalam pertanyaan saya dan itu masih tidak berhasil. Mencoba ini juga dan tidak beruntung $ row-> field_calendar_title;
Sesuatu Pada
Hmmm ... Saya kira dari pesan kesalahannya $fieldtidak terdefinisi ... sudahkah Anda mencoba melakukan var_dump($row)untuk melihat apa yang sebenarnya ada di sana? Anda mungkin akan menemukan bidang yang Anda cari dengan mudah :)
Clive
Hei Clive, ya saya melakukan var_dump dan bidang ada di bawah _field_data bersama dengan sisa nilai bidang ...
SomethingOn
Jika Anda dapat memunculkan keluaran var_dump($row)ke dalam pertanyaan Anda sebagai hasil edit, saya mungkin dapat menemukan nilai yang Anda butuhkan
Clive
@Sesuatu Pada saya sudah memperbarui jawabannya, itu tidak cantik tetapi harus bekerja :)
Clive
7

Pendekatan yang lebih sederhana:

$rendered_field = $view->render_field($fieldname, $view->row_index);

Di sini, $ fieldname adalah nama field asli (bukan tampilan-alias), mis. 'Field_myfield'.

pengguna606696
sumber
3

Mungkin agak terlambat, tapi untuk referensi di masa depan inilah jawaban saya:

Uraiannya agak kabur, tetapi Anda harus benar-benar menggunakan:

$row->{$field->field_alias}

Dalam file template Anda, juga dicatat bahwa:

Variabel yang tersedia:

  • $ view: Objek tampilan
  • $ field: Objek field handler yang dapat memproses input
  • $ row: Hasil SQL mentah yang dapat digunakan
  • $ output: Output yang diproses yang biasanya akan digunakan.

Dalam $ field ada bidang yang disebut field_alias. Jadi $row->{$field->field_alias}sebenarnya menunjuk ke, dalam kasus Anda, field_calendar_title.

Cobalah membuat var_dump $ field dan Anda akan melihatnya sendiri.

Semoga ini bisa membantu siapa pun yang datang di posting ini.

Gerben

Gerben Spil
sumber
Tidak pernah ada kata terlambat, masih menjadi tren. 1. Saya tidak ingin menggunakan contoh monstrous @ Clive, meskipun berfungsi 2. Saya ingin memahami cara bekerja dengan variabel yang diberikan: $ baris, $ diajukan, dll. Saran Anda hanya mengembalikan angka (mungkin nid atau bertiga ), tetapi bagaimana saya bisa mengakses bidang saya dengan tepat. Bagaimana jika saya memiliki dua bidang berbeda yang ingin saya dapatkan?
vladkras
-2

Cara paling sederhana adalah: $ fields ["field_name"] -> konten; Di mana field_name -> nama bidang cck.

Semoga itu bisa membantu !!

Bersulang ! Raj

Rajendra Prasad Das
sumber
1
tidak ada $fieldsvariabel yang tersedia di templat bidang
Ejaz