it-swarm.asia

تضمين نموذج "إضافة عقدة" في الصفحة

أنا أبحث عن طريقة لتضمين نموذج "إضافة عقدة" في الصفحة المقصودة. كنت أستخدم Form Block ، ولكن يبدو أنه يجلب العديد من الأخطاء لأنني كنت أستخدم إصدار لقطة تطوير.

18
ousneo

يمكنك استخدام:

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

على الرغم من أن Daniel Wehner answer صحيح تمامًا ويعمل ، فقد أردت أن أضيف مشكلتين شائعتين واجهتهما في هذا النهج والحلول الخاصة بكيفية التغلب على هذه المشاكل. أولاً شفرتي ، ثم التفسيرات:

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)

لماذا فعلت ذلك بهذه الطريقة ، بدلاً من دانيال البسيط node_add ؟

المشكلة 1: node_add() الوظيفة تغير عنوان الصفحة إلى إنشاء "نوع العقدة" ، هذا صعب مشفرة في الوظيفة.

الحل 1: بدلاً من استخدام الدالة node_add ، قمت بنسخ الرمز وإزالة drupal_set_title. الكود أعلاه هو نفس الكود الخاص بالوظيفة node_add ، باستثناء هذا السطر.

المشكلة 2: في الشكل المضمن ، لم تعمل بعض وظائف ajax. على سبيل المثال ، إذا كان لديك حقل يمكن أن يحتوي على قيم غير محدودة ، بحيث يكون لديك زر "إضافة عنصر آخر" ، أو إذا كان لديك حقل ملف تحميل في النموذج الخاص بك ، فلن يعمل.

الحل 2: في الوحدة النمطية المخصصة الخاصة بك ، نفذ hook_menu_alter() لمسارات استدعاء ajax ، وقم بتضمين 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
Елин Й.

إذا استخدمت رمز الإجابة المقبول ...

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

... داخل وظيفة استدعاء الصفحة ، ثم print drupal_render.. ينتج عن هذا صفحة غير موضعية تمامًا (ذات مظهر معطل).

وبدلاً من ذلك ، أنا فقط return 'ed the $form:

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