Diberikan tampilan, bernama 'Anak-anak' (dengan dua bidang: child_node_id dan nilai birth_order_valu) apa cara terbaik, secara terprogram, untuk beralih melalui tampilan hasil yang ditetapkan diberi display_id dari 'default' dan argumen yang berisi id simpul orangtua?
Sebelumnya, saya telah menggunakan tampilan dalam sebuah blok menggunakan kode yang mirip dengan yang berikut ini:
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2)) {
$node = node_load(arg(1));
$args = array($node->nid);
$view = views_get_view('Children');
print $view->preview('default', $args);
}
Namun, di blok lain saya ingin melakukan beberapa logika berdasarkan pada nilai-nilai yang ditemukan dalam tampilan. Anda mungkin dapat menebak bahwa logika bisnis berdasarkan pada persyaratan akhir saya: Saya ingin blok kode yang mendukung tampilan ('Anak-anak') dipanggil beberapa kali. Ketika saya mengulangi hasil tampilan dataset, saya ingin mengulang secara berulang melalui node anak-anak yang meminta anak-anak mereka.
foreach
alih-alih untuk (.. sizeof ()), kinerjanya jauh lebih baik (karena C bukan PHP).if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))
, mungkin lebih baik digunakanif ($node = menu_get_object())
.Jawaban:
Bermain-main dengan Tampilan sedikit sepertinya saya telah berhasil pendekatan. Namun, saya ingin membiarkan pertanyaan saya terbuka untuk jawaban lain dan solusi yang lebih baik.
Kunci untuk mengeksekusi tampilan beberapa kali adalah bagi saya untuk membatalkan set ($ view) ketika saya selesai dengan set hasil.
sumber
Saya mendapatkan jarak tempuh yang baik dari fungsi berikut. Nilai kembali adalah array dari semua catatan tampilan. Memanggil dsm ($ return_value) akan memberi Anda ide bagus tentang struktur tampilan khusus Anda.
sumber
Berikut adalah fungsi pembantu yang sudah ada di dalam API Drupal. (Saya menghabiskan beberapa saat di sekitar Drupal Docs, dan akhirnya menemukannya. Tampaknya banyak yang lain juga telah menghasilkan solusi yang tidak menggunakan bantuan ini, dan juga bahwa bantuan ini melakukan satu langkah menarik yang tidak dimiliki solusi lain .. untuk memanggil pre_render pada objek $ view sebelum dijalankan).
Saya tidak bisa memastikan apakah itu bekerja dengan baik atau tidak, tapi setidaknya itu adalah tempat khusus untuk membahas masalah dengan pendekatan ini.
Untuk D6 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6
Dan untuk D7 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7
sumber