Saya sarankan menjelaskan masalah Anda secara lebih rinci dan mengatakan apa yang sudah Anda coba. Itu akan menunjukkan beberapa inisiatif dan membantu orang lain memberi Anda jawaban yang lebih baik.
Aram Boyajyan
Jawaban:
16
Buka file YOURTHEMENAME.theme Anda dan tambahkan kode berikut:
Anda cukup tema setiap bentuk yang Anda inginkan. Saya tidak suka metode oleh @rpayanm, karena sulit untuk maintane dan sulit dibaca, dengan bentuk besar ini tidak terjadi, hanya pembungkus tunggal dan struktur sederhana.
Setiap bentuk yang mencoba menggunakan tema sama dengan nama mesin mereka. Anda dapat menemukan nama templat ini $form['#theme']hanya dengan mengubah, selalu (atau hampir selalu) sama dengan nama mesin id formulir. Yang perlu Anda lakukan adalah mendaftarkan templat untuk itu. Anda perlu menerapkan hook_theme(). Anda dapat menulisnya di CUSTOMMODULE.module atau di THEMENAME.theme. Kunci tema harus sama dengan di $form['#theme'], sehingga otomatis menggunakannya, jika tidak, Anda perlu menambahkan yang baru melalui formulir ubah.
Maka Anda harus membuat custom-form-template-name.html.twig(dengan nama templat Anda dari hook_theme ()).
Template minimal adalah
{{ form }}
Anda juga dapat mencetak setiap bidang dari formulir di mana Anda inginkan
{{ form.field_name }}
Di sini Anda dapat melakukan apa pun yang Anda inginkan dengan markup.
Anda juga dapat mengirimkan data tambahan ke templat dengan menerapkan template_preprocess_TEMPALTENAME
function template_preprocess_FORM_ID_THEME(&$variables){
$variables['example']='This is added via preprocess';}
Dan kemudian gunakan dalam template
{{ example }}<div class="first-field">{{ form.first_field }}</div><div class="second-field">{{ form.second_field }}</div><div class="buttons">{{ form.submit }}{{ form.preview }}</div>{#Don't forget to add printing form special info at the end.
Without this data form will not working propertly.
#}
{{ form.form_build_id }}
{{ form.form_token }}
{{ form.form_id }}
Saya pikir metode ini lebih fleksibel, bersih dan kuat.
Ps maaf untuk bahasa Inggris saya, berharap seseorang mengedit dan memperbaiki kesalahan saya :)
Perhatikan bahwa bagi saya, saya telah mengubah {{ form.submit }}ke{{ form.actions.submit }}
mikeDOTexe
@Niklan: Saya telah mengikuti kode yang sama di atas untuk formulir bundel entitas kustom saya. Jika saya menggunakan {{ form }}, itu adalah mencetak seluruh formulir. Tetapi jika saya menggunakan bidang tertentu seperti {{ form.my_field }}, tidak ada yang ditampilkan. Adakah yang tahu bagaimana kami bisa menampilkan setiap bidang formulir bundel entitas kustom?
kalidasan
@kalidasan mencoba mencetak setiap bidang tanpa mencetak {{ form }}. Saya menyarankan setelah mencetak {{ form }}semua elemen formulir akan ditandai sebagai '#rendered' => TRUEdan tidak akan diberikan segera. Jika Anda tidak ingin menggunakan metode bentuk tema ini, Anda harus mencetak setiap bidang satu per satu. Tidak ada drupal_render_children()dalam Drupal 8, kecuali Anda menulisnya sendiri. Bagaimanapun secara default ini akan menyebabkan duplikat, jadi cobalah untuk mencetak setiap bidang secara manual.
Niklan
@Niklan: Saya belum pernah pakai {{ form }} & {{ form.my_field }}bersama. Pertama dicoba dengan saja {{ form }}, di sini saya bisa melihat seluruh formulir. Kemudian dihapus {{ form }}dari template kemudian mencoba untuk masing-masing bidang formulir secara terpisah seperti ini {{ form.my_field }}, etc , tetapi tidak mengeluarkan apa pun. Tidak ada yang ditampilkan.
kalidasan
1
@kalidasan Anda dapat menghapus judul di template_preprocess_FORM_ID_THEME(&$variables). Dalam preprocess ini Anda bisa menambahkan variabel baru, mengubah elemen form yang sudah ada. Saya tidak pernah melihat ini {{ form.field_name.widget }}dan saya sering bertemakan bentuk. Sepertinya bidang ini dibuat khusus atau ditambahkan oleh modul pihak ketiga? Saya pikir ini diperbolehkan, tetapi tidak berlaku untuk orang lain. Saya sarankan Anda untuk memulai dengan hook preprocess dan lihat saja $variables['form']apa yang ada di dalamnya.
Jawaban:
Buka file YOURTHEMENAME.theme Anda dan tambahkan kode berikut:
Dan inilah hasilnya:
Jangan lupa untuk menghapus cache Anda;)
sumber
Anda cukup tema setiap bentuk yang Anda inginkan. Saya tidak suka metode oleh @rpayanm, karena sulit untuk maintane dan sulit dibaca, dengan bentuk besar ini tidak terjadi, hanya pembungkus tunggal dan struktur sederhana.
Setiap bentuk yang mencoba menggunakan tema sama dengan nama mesin mereka. Anda dapat menemukan nama templat ini
$form['#theme']
hanya dengan mengubah, selalu (atau hampir selalu) sama dengan nama mesin id formulir. Yang perlu Anda lakukan adalah mendaftarkan templat untuk itu. Anda perlu menerapkanhook_theme()
. Anda dapat menulisnya di CUSTOMMODULE.module atau di THEMENAME.theme. Kunci tema harus sama dengan di$form['#theme']
, sehingga otomatis menggunakannya, jika tidak, Anda perlu menambahkan yang baru melalui formulir ubah.Drupal pass $ form variabel dengan formulir.
Maka Anda harus membuat
custom-form-template-name.html.twig
(dengan nama templat Anda dari hook_theme ()).Template minimal adalah
Anda juga dapat mencetak setiap bidang dari formulir di mana Anda inginkan
Di sini Anda dapat melakukan apa pun yang Anda inginkan dengan markup.
Anda juga dapat mengirimkan data tambahan ke templat dengan menerapkan
template_preprocess_TEMPALTENAME
Dan kemudian gunakan dalam template
Saya pikir metode ini lebih fleksibel, bersih dan kuat.
Ps maaf untuk bahasa Inggris saya, berharap seseorang mengedit dan memperbaiki kesalahan saya :)
Contoh bentuk kompleks menggunakan metode ini.
sumber
{{ form.submit }}
ke{{ form.actions.submit }}
{{ form }}
, itu adalah mencetak seluruh formulir. Tetapi jika saya menggunakan bidang tertentu seperti{{ form.my_field }}
, tidak ada yang ditampilkan. Adakah yang tahu bagaimana kami bisa menampilkan setiap bidang formulir bundel entitas kustom?{{ form }}
. Saya menyarankan setelah mencetak{{ form }}
semua elemen formulir akan ditandai sebagai'#rendered' => TRUE
dan tidak akan diberikan segera. Jika Anda tidak ingin menggunakan metode bentuk tema ini, Anda harus mencetak setiap bidang satu per satu. Tidak adadrupal_render_children()
dalam Drupal 8, kecuali Anda menulisnya sendiri. Bagaimanapun secara default ini akan menyebabkan duplikat, jadi cobalah untuk mencetak setiap bidang secara manual.{{ form }} & {{ form.my_field }}
bersama. Pertama dicoba dengan saja{{ form }}
, di sini saya bisa melihat seluruh formulir. Kemudian dihapus{{ form }}
dari template kemudian mencoba untuk masing-masing bidang formulir secara terpisah seperti ini{{ form.my_field }}, etc
, tetapi tidak mengeluarkan apa pun. Tidak ada yang ditampilkan.template_preprocess_FORM_ID_THEME(&$variables)
. Dalam preprocess ini Anda bisa menambahkan variabel baru, mengubah elemen form yang sudah ada. Saya tidak pernah melihat ini{{ form.field_name.widget }}
dan saya sering bertemakan bentuk. Sepertinya bidang ini dibuat khusus atau ditambahkan oleh modul pihak ketiga? Saya pikir ini diperbolehkan, tetapi tidak berlaku untuk orang lain. Saya sarankan Anda untuk memulai dengan hook preprocess dan lihat saja$variables['form']
apa yang ada di dalamnya.