Saya ingin merender bidang simpul di dalam blok. Ini berfungsi seperti ini:
<?php
if ($node) {
if (isset($node->field_body_secondary) && $field = $node->field_body_secondary->value) {
$markup = render($field);
$build = array(
'#type' => 'markup',
'#markup' => $markup,
);
}
}
return $build;
Tapi ini bukan 100% seolah-olah saya hanya akan membuat bidang secara normal, membuatnya terlihat dalam pengaturan mode tampilan.
$nodeview
memiliki#node
sebagai kunciUntuk merender bidang tunggal dengan pengaturan tampilan mode tampilan, Anda dapat menggunakan
view()
metode bidang:Contoh untuk rendering gambar dalam format teaser:
Atau seluruh tubuh:
sumber
['label' => 'inline' ]
$vars['var_name'] = $node_object->field_name->view()[0];
dan kemudian di ranting, saya bisa me-render {{var_name}}Jawaban ini dibangun di https://drupal.stackexchange.com/a/208061/394
Untuk merender secara lengkap bidang yang Anda selesaikan dengan menelepon
renderRoot()
, yang menetapkan konteks render terpisah dari apa yang akan digunakan respons laman - konteks render tunggal untuk permintaan atau sub-permintaan. Kami juga bisa menggunakanrenderPlain()
, tetapi kemudian itu akan luput dari semua hal.Di Drush repl tetapi tidak dalam eksekusi halaman normal, ini memberi saya peringatan:
sumber
terkait dengan jawaban Alex , berikut adalah cara saya memodifikasinya untuk menggunakan config_pages dan membangun blok global_footer:
Mungkin lebih baik untuk membuat bidang arbitrer dari pengaturan config_pages sebagai lawan untuk menarik data dari sebuah node, tapi saya kira itu benar-benar tergantung pada use-case spesifik mengenai metode mana yang terbaik.
sumber
Berkat jawaban Rainer Feike saya datang ke solusinya:
Menggunakan
$viewBuilder->viewField
saya dapat membuat bidang apa pun secara terpisah yang saya butuhkan. Saya hanya perlu mengetahui cara menambahkan caching tergantung pada pengaturan mode tampilan, tapi ini adalah pertanyaan lain :)sumber