Bagaimana cara menggunakan Tampilan PHP untuk menulis ulang hasil bidang?


7

Saya menggunakan Tampilan PHP untuk menulis ulang bidang dalam Tampilan. Saya dapat mengakses semua variabel TETAPI mereka yang memiliki mode build. Dalam kasus saya, saya memiliki Content: Node field (yang dapat dibangun sesuai dengan tampilan apa pun), yang harus dapat diakses menggunakan variabel $row->nodefield. Namun, konten variabel itu selalu kosong. Saya telah mencoba dengan variabel lain, dan setiap bidang dengan mode build tidak akan dirender dalam Tampilan PHP .

masukkan deskripsi gambar di sini

Apakah ini masalah desain atau saya melewatkan sesuatu?

Saya menggunakan Drupal 7 dan Views 3

EDIT

Menggunakan dpm () pada nilai yang tersedia mengembalikan yang berikut:

dpm ($ row)

masukkan deskripsi gambar di sini

dpm ($ data)

masukkan deskripsi gambar di sini

Jawaban:


6

Di atas bagian "Kode Keluaran" Anda harus memeriksa $datavariabel di bidang "Nilai".

Biasanya saya hanya dpm($data)mencari bidang yang saya butuhkan. Kemudian Anda bisa menyimpannya ke $static['myvalue']variabel untuk digunakan di bidang "Kode Keluaran".

Itu membingungkan tetapi untuk beberapa alasan jika Anda mencoba hanya $row->xxxvariabel di bagian "Kode Keluaran", mereka kosong atau disetel ke id-id.


Terima kasih. Saya baru dalam hal ini, jadi bisakah Anda membantu saya lebih jauh: ketika saya menyalin dpm($data)di bidang nilai, Views mengembalikan "panggilan ke fungsi yang tidak ditentukan dpm ()" kesalahan "
— znat

BAIK. DPM adalah fungsi devel, sehingga tidak akan berfungsi jika Anda tidak memiliki modul devel yang diinstal. Baik instal itu atau cukup gunakan print_r ($ data).
— Peluang G

Saya tidak menemukan konten yang relevan. (lihat edit saya) Semua bidang tampak nol di objek $ row. Saya telah mencoba variabel lain seperti $ view atau $ handler tanpa hasil. Token [simpulfield] tersedia di Hasil Menulis Ulang, jadi itu harus di suatu tempat. Ada ide lain?
— znat

3

$rowItem Variabel yang Tersedia di Tampilan agak tidak berguna untuk mendapatkan nilai bidang. Tetapi Anda tidak perlu menggunakan noad_loaduntuk mendapatkan data yang Anda butuhkan. Pertama, seperti biasa, sembunyikan output dari bidang yang ingin Anda tulis ulang, kemudian di bidang Kode Output bidang PHP Anda, Anda dapat menggunakan $dataseperti:

<?php echo check_markup($data->field_field_body[0]['rendered']['#markup'], 'nitf_body'); ?>

Dalam hal ini saya menanggalkan tag yang tidak diizinkan dan dikaitkan dari konten untuk digunakan dalam ekspor NITF. Jika Anda tidak yakin apa yang ada di dalamnya $data, tentu saja Anda dapat print_r($data)melihatnya.


apa yang sebenarnya Anda maksud dengan: "Pertama, seperti biasa, sembunyikan output dari bidang yang ingin Anda tulis ulang"? Apakah Anda merujuk ke kotak centang "Kecualikan dari tampilan" pada bidang yang ingin kami tulis ulang?
— Antonio

Iya. Anda menggunakan "Kecualikan dari Tampilan" setiap kali Anda ingin mendapatkan nilai suatu bidang dan menggunakannya dalam bidang khusus berikutnya.
— Scott Lahteine

1
Anda bisa menggunakan $data->field_field_body[0]['raw']['value']untuk mendapatkan nilai mentah.
— user2534880

1

Kiat tambahan: Array $ data memang berisi data simpul mentah dan dapat dicetak. Tetapi untuk merendernya dengan benar, kita perlu memproses bidang dengan fungsi seperti field_view_field .


1

Apakah Anda mencoba melakukan ini di dalam tampilan? Mengapa tidak hanya tema template tampilan itu sendiri daripada menggunakan PHP global? Saya tidak yakin apakah print_r akan berfungsi di dalam bidang tampilan. Jika itu saya, saya hanya akan mengklik tema -> informasi, Anda akan melihat sesuatu seperti view-view-field - MyViewName.tpl.php

(edit, klarifikasi) Di bawah folder tema modul views, salin "views-view-field.tpl.php" lalu ganti namanya menjadi "views-view-field - MyViewName.tpl.php" dan letakkan di bawah folder / template Anda di situs Anda mereka. Dalam file tersebut, Anda akan melihat sesuatu seperti

<?php print $output; ?> 

Anda dapat menghapus itu dan menambahkan semua bidang Anda secara manual seperti

<div class="MyPrettyTitle"><?php print $row->_field_data['nid']['entity']->title; ?></div> 
<div class="MyNodeBody">
<?php print $row->_field_data['nid']['entity']->body['und'][0]['value'];?>
</div>

dll. Atau bungkus $ output dengan apa pun yang Anda inginkan.

Juga, saya tidak pernah beruntung dengan DEVEL, saya selalu menggunakan:

<?php print var_dump($row);?> 

Kemudian cari sumber halaman untuk mendapatkan variabel. Mungkin saya hanya menggunakan DEVEL yang salah, tetapi saya menemukan saya bisa mendapatkan variabel untuk setiap baris lebih mudah dengan var_dump PHP lama biasa.


Ini memberikan baris duplikat!
— user219492

0

Saya menghabiskan dua hari untuk menemukan solusinya. Cara termudah adalah memperbarui "Modul Views Views" ke 7.x-2.x-dev. Sang Maintainer memperbaiki masalah ini dalam versi 2.x mereka.

Anda dapat mengunduh dari sini (Pastikan Anda mengunduh 7.x-2.x-dev ): https://www.drupal.org/project/views_php

Semoga bisa membantu seseorang.


0

Anda TIDAK PERNAH menyimpan kode PHP di basis data Anda (dan dengan View PHP Anda akan). Gunakan pengait Views sebagai gantinya untuk memodifikasi hasil.


Hai @ssibal, dan terima kasih telah berkontribusi. Bisakah Anda menjelaskan mengapa ini harus dihindari? Itu akan sangat meningkatkan kualitas posting Anda.
— Neograph734
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.