web-gelistirme-sc.com

Bir sayfaya "düğüm ekleme" formu gömme

Bir açılış sayfasına bir "düğüm ekleme" formu gömmek için bir yol arıyorum. Form Block kullanıyordum, ancak bir geliştirme anlık görüntü sürümü kullandığım için birçok hata getiriyor gibi görünüyor.

18
ousneo

Kullanabilirsiniz:

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

Daniel Wehner'ın answer kesinlikle doğru olmasına ve işe yarmasına rağmen, bu yaklaşımla karşılaştığım iki yaygın sorunu eklemek istedim ve bu sorunların üstesinden nasıl geldiğime geçici çözümler getirdim. Önce kodum, sonra açıklamalar:

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)

Neden Daniel'in basit node_add yerine böyle yaptım?

Sorun 1: node_add() işlevi sayfa başlığını 'düğüm türü' oluştur, bu zor işlevde kodlanmış.

Geçici Çözüm 1: node_add İşlevini kullanmak yerine, kodu kopyaladım ve drupal_set_title Dosyasını kaldırdım. Yukarıdaki kod, bu tek satır hariç, node_add İşleviyle aynı koddur.

Sorun 2: Gömülü formda bazı ajax işlevleri çalışmadı. Örneğin, sınırsız değerlere sahip olabilen bir alanınız varsa, 'Başka bir öğe ekle' düğmesine sahip olmanız veya formunuzda bir yükleme dosyası alanı varsa, bunlar çalışmaz.

Geçici çözüm 2: Özel modülünüzde, ajax çağrı yolları için hook_menu_alter() uygulayın ve node.pages.inc Ekleyin.

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
Елин Й.

Kabul edilen cevap kodunu kullanırsam ...

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

... bir sayfa geri arama işlevinin içinde, sonra print drupal_render.. Bu tamamen temalı olmayan (bozuk görünümlü) bir sayfa ile sonuçlanır.

Bunun yerine, ben sadece return '_ $form:

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