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 ) ) )
                                ...
                        )
) 

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!


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'.


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


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


1
tidak ada $fieldsvariabel yang tersedia di templat bidang
Ejaz
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.