it-swarm-id.com

Sematkan formulir "node add" di halaman

Saya mencari cara untuk menyematkan formulir "node add" di halaman arahan. Saya menggunakan Formulir Blok , tetapi tampaknya membawa banyak kesalahan karena saya menggunakan versi snapshot pengembangan.

18
ousneo

Kamu bisa menggunakan:

module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);
28
Daniel Wehner

Meskipun Daniel Wehner jawaban benar-benar benar dan berfungsi, saya ingin menambahkan dua masalah umum yang saya hadapi dengan pendekatan ini dan menyelesaikan masalah bagaimana saya mengatasi masalah tersebut. Pertama kode saya, lalu penjelasannya:

global $user;
module_load_include('inc', 'node', 'node.pages');
$node = (object) array(
  'uid' => $user->uid,
  'name' => (isset($user->name) ? $user->name : ''),
  'type' => 'YOUR_NODE_TYPE',
  'language' => LANGUAGE_NONE,
);
$form = drupal_get_form('YOUR_NODE_TYPE . '_node_form', $node);

print drupal_render($form)

Mengapa saya 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 fungsi node_add, Saya telah menyalin kode dan menghapus drupal_set_title. Kode di atas adalah kode yang sama dengan fungsi node_add, Kecuali dari satu baris ini.

Masalah 2: Dalam formulir tertanam beberapa fungsi ajax tidak berfungsi. Misalnya jika Anda memiliki bidang yang dapat memiliki nilai tak 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 sertakan node.pages.inc.

function YOURMODULE_menu_alter(&$items) {
  $items['file/ajax']['file path'] = drupal_get_path('module', 'node');
  $items['file/ajax']['file'] = 'node.pages.inc';
  $items['system/ajax']['file path'] = drupal_get_path('module', 'node');
  $items['system/ajax']['file'] = 'node.pages.inc';
}
16
Елин Й.

Jika saya menggunakan kode jawaban yang diterima ...

module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);

... di dalam fungsi panggilan balik halaman, lalu print drupal_render.. ini menghasilkan halaman yang sama sekali tidak bertema (tampak rusak).

Jadi sebagai gantinya, saya hanya return 'ed the $form:

module_load_include('inc', 'node', 'node.pages');
$form = node_add('program_registration');
return $form;
0
alec