Saya memiliki persyaratan untuk mencetak wilayah di templat halaman saya karena tidak kosong , tetapi akan selalu mencetak wilayah kosong apa pun yang terjadi. Apa cara yang tepat untuk mendeteksi daerah kosong?
Misalnya, {% if page.local_tasks is not empty %}{{ page.local_tasks }}{% endif %}
mencetak <div class="region region-local-tasks"></div>
.
Jika saya merender wilayah themename_preprocess_page()
dengan var_dump(drupal_render($variables['page']['highlighted']));
saya akan mendapatkan SafeString dengan token placeholder:
<div class="region region-highlighted"><drupal-render-placeholder callback="Drupal\Core\Render\Element\StatusMessages::renderMessages" arguments="0" token="a8c34b5e"></drupal-render-placeholder></div>
Jadi, secara teknis wilayah itu tidak kosong tapi saya tidak bisa berbuat apa-apa.
page.local_tasks
mengandung ketika Anda merasa itu harus kosong?Jawaban:
TL; DR untuk ini adalah bahwa tidak ada cara untuk secara andal memeriksa apakah wilayah kosong atau tidak dalam templat.
Dalam Drupal 8 pada titik ketika kita berada di level templat, kita tidak dapat mengetahui apakah wilayah memiliki konten atau tidak karena konten tersebut diterjemahkan dengan malas. Ada masalah Drupal 8 terbuka untuk ini.
Apa yang mungkin harus Anda lakukan untuk mencapai ini adalah menulis CSS yang menguji apakah wilayah itu kosong. Anda dapat mencoba menggunakan menggunakan : kosong pseudo-selector .
sumber
coba terapkan filter setelah render, seperti ini:
sumber
strip_tags
filter).Dalam ranting Anda harus benar-benar dapat melakukan:
Namun mungkin ada sesuatu di dalam page.local_tasks (seperti markup kosong). Silakan coba yang berikut ini:
sumber
debug
maksud Andadump
? Apa yang terjadi jika Anda melakukannya{% if page.local_tasks %}Crazy magic{% endif %}
?page.local_tasks
tidak kosong. Penuh dengan HTML. Saya akan memperbarui jawaban saya.Ini berhasil untuk saya.
Cukup sederhana.
sumber
Anda harus menggunakan
Renderer
layanan alih-alihyang sudah usang, jadi:drupal_render()
Ini akan menghindari pembuatan
drupal-render-placeholder
tag di output.Masalah serupa: Bagaimana cara mengganti drupal-render-placeholder secara manual?
sumber
coba ini :
sumber
Ini benar-benar berfungsi dalam kasus saya
striptag menerima serangkaian tag untuk disimpan, jadi Anda juga dapat menambahkan tag tanpa konten apa pun yang Anda harapkan dimiliki, seperti
<form><img>
dll.sumber
Hal berikut ini juga berfungsi ketika debugging ranting diaktifkan:
sumber
Untuk mendeteksi apakah wilayah kosong atau tidak kode seperti ini:
Dalam kode di atas memeriksa apakah wilayah local_tasks kosong atau tidak dan jika kosong maka tidak akan mencetak wilayah itu
sumber