Saya mencari cara untuk menyematkan formulir "simpul tambahkan" pada halaman arahan. Saya menggunakan Formulir Blok , tetapi tampaknya membawa banyak kesalahan karena saya menggunakan versi snapshot pengembangan.
19
Saya mencari cara untuk menyematkan formulir "simpul tambahkan" pada halaman arahan. Saya menggunakan Formulir Blok , tetapi tampaknya membawa banyak kesalahan karena saya menggunakan versi snapshot pengembangan.
Jawaban:
Kamu bisa memakai:
sumber
node_add()
tidak ditentukan, Anda ingin menambahkannyaif (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }
di awal. Informasi ini datang dari sini: ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )Meskipun jawaban Daniel Wehner benar-benar tepat dan berfungsi, saya ingin menambahkan dua masalah umum yang saya hadapi dengan pendekatan ini dan mencari tahu bagaimana saya mengatasi masalah itu. Pertama kode saya, lalu penjelasannya:
Kenapa aku melakukannya dengan cara ini, bukannya Daniel yang sederhana
node_add
?Masalah 1:
node_add()
fungsi mengubah judul halaman menjadi Buat 'tipe simpul' , ini sulit dikodekan dalam fungsi.Solusi 1: Alih-alih menggunakan
node_add
fungsi, saya telah menyalin kode dan menghapusdrupal_set_title
. Kode di atas adalah kode yang sama dengannode_add
fungsi, kecuali dari baris yang satu ini.Masalah 2: Dalam formulir tertanam beberapa fungsi ajax tidak berfungsi. Misalnya jika Anda memiliki bidang yang dapat memiliki nilai tidak terbatas, sehingga Anda memiliki tombol 'Tambahkan item lain', atau jika Anda memiliki bidang file unggahan di formulir Anda, mereka tidak berfungsi.
Solusi 2: Dalam modul khusus Anda, terapkan
hook_menu_alter()
untuk jalur panggilan ajax, dan sertakannode.pages.inc
.sumber
function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
Jika saya menggunakan kode jawaban yang diterima ...
... di dalam fungsi panggilan balik halaman, maka
print drupal_render..
ini menghasilkan halaman yang sama sekali tidak bertema (tampak rusak).Jadi sebagai gantinya, saya hanya
return
mengedit$form
:sumber