एक पेज में "नोड ऐड" फॉर्म को एम्बेड करें


19

मैं लैंडिंग पृष्ठ पर "नोड ऐड" फ़ॉर्म एम्बेड करने का तरीका ढूंढ रहा हूं। मैं फॉर्म ब्लॉक का उपयोग कर रहा था , लेकिन यह कई त्रुटि लाता है क्योंकि मैं एक विकास स्नैपशॉट संस्करण का उपयोग कर रहा था।


1
यदि आप प्रपत्र के साथ विशिष्ट समस्याएँ हैं, तो उस मॉड्यूल के लिए समस्या कतार दिखने के लिए सबसे अच्छी जगह ब्लॉक कर सकते हैं।
जेरेमी फ्रेंच

जवाबों:


28

आप उपयोग कर सकते हैं:

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

3
यदि आपको कोई त्रुटि मिलती है जो node_add()अपरिभाषित है, तो आप if (!function_exists('node_add')) { module_load_include('inc', 'node', 'node.pages'); }शुरुआत में जोड़ना चाहेंगे । यह जानकारी यहाँ से मिलती है: ( kahthong.com/2012/01/embed-drupal-node-form-anywhere )
mbrakken

इसे ब्लॉक में रखने का एक तरीका है? या क्या इसे tpl.php फ़ाइल में शामिल किया जाना है?

मैं अजाक्स तत्वों के साथ कोड का उपयोग नहीं कर सकता (उदाहरण के लिए: फ़ाइल अपलोड)। संभव समाधान
दिमित्री

@Dimetry एक एम्बेडेड नोड रूप में अजाक्स तत्वों का उपयोग करने के लिए मेरा जवाब देखें ।
Елин Й

16

हालाँकि डैनियल वेहनर का जवाब बिल्कुल सही है और काम करता है, मैं दो आम समस्याओं को जोड़ना चाहता था जो मुझे इस दृष्टिकोण और कार्यदक्षता के साथ सामना करना पड़ा कि कैसे मैंने उन समस्याओं को दूर किया। पहले मेरा कोड, फिर स्पष्टीकरण:

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';
}

क्या इनलाइन एंटिटीफॉर्म एक विकल्प होगा? मैं मॉड्यूल के साथ चारों ओर खेल रहा हूं, लेकिन फ्रंट-एंड पर एक नोड ऐड फॉर्म प्रदर्शित करने में सक्षम नहीं है, केवल जब आप एक नोड को संपादित करते हैं तो आप एक एनफ़ीयर फ़ील्ड प्रदान कर सकते हैं जो नोड ऐड फॉर्म प्रदर्शित करता है।
AlxVallejo

1
इनलाइन एंटिटीफॉर्म इकाई संदर्भ क्षेत्रों के लिए है, जो इस प्रश्न के लिए अप्रासंगिक है।
Елин Й

1
यदि आप फ़ाइल अपलोड, आदि के लिए hook_menu_alter () का उपयोग नहीं करना चाहते हैं, तो आप नोड फॉर्म के बदले एक फॉर्म में शामिल को जोड़ सकते हैं: function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
joe_flash

@ ЕлинЙ। क्या आपका जवाब इस सवाल पर लागू होता है ?
उमर

1
@ मेरा नाम केवल पृष्ठ पर एक नोड फ़ॉर्म जोड़ने के बारे में है। यह न तो AJAX के माध्यम से फॉर्म जमा करेगा और न ही यह दृश्य को अपडेट करेगा। हालाँकि, आप AJAX फ्रेमवर्क का उपयोग करने वालों को प्राप्त कर सकते हैं ।
Елин Й

0

अगर मैं स्वीकृत उत्तर कोड का उपयोग करता हूं ...

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;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.