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

znat
sumber

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.

Peluang G
sumber
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.

Scott Lahteine
sumber
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 .

Druvision
sumber
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.

DrupalMonster
sumber
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.

jmu
sumber
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.

ssibal
sumber
Hai @ssibal, dan terima kasih telah berkontribusi. Bisakah Anda menjelaskan mengapa ini harus dihindari? Itu akan sangat meningkatkan kualitas posting Anda.
Neograph734