Sayfaya "düğüm ekleme" formu gömme


19

Bir açılış sayfasına bir "düğüm ekleme" formu gömmek için bir yol arıyorum. Form Bloğu 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.


1
Form bloğu ile ilgili belirli sorunlar yaşıyorsanız, bakmak için en iyi yer bu modülün sorun kuyruğu olabilir.
Jeremy French

Yanıtlar:


28

Kullanabilirsiniz:

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

3
node_add()Tanımsız bir hata alırsanız if (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }, başlangıçta eklemek istersiniz . Bu bilgi buradan gelir: ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )
mbrakken

Bunu blok haline getirmenin bir yolu var mı? Yoksa bunun tpl.php dosyasına dahil edilmesi gerekiyor mu?

Ajax elemanları ile form için kodu kullanamıyorum (örneğin: dosya yükleme). Olası çözüm
Dimetry

Bkz @Dimetry Cevabımı gömülü düğüm şeklinde Ajax elemanlarını kullanarak.
Елин Й.

16

Daniel Wehner'ın cevabı kesinlikle doğru ve işe yarıyor olsa da, bu yaklaşımla karşılaştığım iki yaygın sorunu eklemek istedim ve bu sorunların üstesinden nasıl geldiğime dair geçici çözümler var. Ö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 yerine bu şekilde yaptım node_add?

Sorun 1: node_add()işlev sayfa başlığını 'düğüm türü' oluştur olarak değiştirir , bu işlevde sabit olarak kodlanmıştır.

Geçici Çözüm 1: node_addİşlev yerine , kodu kopyaladım ve kaldırdım drupal_set_title. Yukarıdaki kod, node_addbu tek satır hariç , işlevle aynı koddur .

Sorun 2: Gömülü formda bazı ajax işlevleri çalışmadı. Örneğin, sınırsız değerleri 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 hook_menu_alter()ajax çağrı yolları için uygulayın ve ekleyin 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';
}

Inline Entityform bir alternatif olabilir mi? Modülle oynuyorum ama ön uçta bir düğüm ekleme formu görüntüleyemedim, yalnızca bir düğümü düzenlediğinizde düğüm ekleme formu görüntüleyen bir varlık referans alanı sağlayabilirsiniz.
AlxVallejo

1
Satıriçi Entityform, bu soru ile ilgisi olmayan varlık referans alanları içindir.
Елин Й.

1
Dosya yüklemeleri vb. İçin hook_menu_alter () işlevini kullanmak istemiyorsanız, düğüm formu için form değiştiricisine dahil etmeyi ekleyebilirsiniz:function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
joe_flash

@ ЕлинЙ. Cevabınız bu soru için geçerli mi?
Umair

1
@Umair Cevabım yalnızca sayfaya bir düğüm formu eklemekle ilgilidir. Formu AJAX aracılığıyla göndermez veya görünümü güncellemez. Ancak, AJAX Framework kullanarak bunları elde edebilirsiniz .
Елин Й.

0

Kabul edilen cevap kodunu kullanırsam ...

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

... bir sayfa geri çağırma işlevi içinde, print drupal_render..bu tamamen temalı (bozuk görünümlü) bir sayfa ile sonuçlanır.

Bunun yerine, sadece return'ed $form:

module_load_include('inc', 'node', 'node.pages');
$form = node_add('program_registration');
return $form;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.