أنا أبحث عن طريقة لتضمين نموذج "إضافة عقدة" في الصفحة المقصودة. كنت أستخدم Form Block ، ولكن يبدو أنه يجلب العديد من الأخطاء لأنني كنت أستخدم إصدار لقطة تطوير.
يمكنك استخدام:
module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);
على الرغم من أن 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';
}
إذا استخدمت رمز الإجابة المقبول ...
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;