मैं लैंडिंग पृष्ठ पर "नोड ऐड" फ़ॉर्म एम्बेड करने का तरीका ढूंढ रहा हूं। मैं फॉर्म ब्लॉक का उपयोग कर रहा था , लेकिन यह कई त्रुटि लाता है क्योंकि मैं एक विकास स्नैपशॉट संस्करण का उपयोग कर रहा था।
मैं लैंडिंग पृष्ठ पर "नोड ऐड" फ़ॉर्म एम्बेड करने का तरीका ढूंढ रहा हूं। मैं फॉर्म ब्लॉक का उपयोग कर रहा था , लेकिन यह कई त्रुटि लाता है क्योंकि मैं एक विकास स्नैपशॉट संस्करण का उपयोग कर रहा था।
जवाबों:
आप उपयोग कर सकते हैं:
module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);
node_add()
अपरिभाषित है, तो आप if (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }
शुरुआत में जोड़ना चाहेंगे । यह जानकारी यहाँ से मिलती है: ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )
हालाँकि डैनियल वेहनर का जवाब बिल्कुल सही है और काम करता है, मैं दो आम समस्याओं को जोड़ना चाहता था जो मुझे इस दृष्टिकोण और कार्यदक्षता के साथ सामना करना पड़ा कि कैसे मैंने उन समस्याओं को दूर किया। पहले मेरा कोड, फिर स्पष्टीकरण:
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()
अजाक्स कॉल पथ के लिए लागू करें, और शामिल करें 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';
}
function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
अगर मैं स्वीकृत उत्तर कोड का उपयोग करता हूं ...
module_load_include('inc', 'node', 'node.pages');
$form = node_add('nodetype');
print drupal_render($form);
... एक पेज कॉलबैक फ़ंक्शन के अंदर, फिर print drupal_render..
यह पूरी तरह से संयुक्त राष्ट्र के थीम पर आधारित (टूटा हुआ) पृष्ठ होता है।
इसके बजाय, मैं सिर्फ return
'एड $form
:
module_load_include('inc', 'node', 'node.pages');
$form = node_add('program_registration');
return $form;