আমি অবতরণ পৃষ্ঠায় একটি "নোড অ্যাড" ফর্ম এম্বেড করার একটি উপায় খুঁজছি। আমি ফর্ম ব্লক ব্যবহার করছিলাম তবে এটি অনেক ত্রুটি এনেছে বলে মনে হচ্ছে কারণ আমি একটি বিকাশ স্ন্যাপশট সংস্করণ ব্যবহার করছিলাম।
আমি অবতরণ পৃষ্ঠায় একটি "নোড অ্যাড" ফর্ম এম্বেড করার একটি উপায় খুঁজছি। আমি ফর্ম ব্লক ব্যবহার করছিলাম তবে এটি অনেক ত্রুটি এনেছে বলে মনে হচ্ছে কারণ আমি একটি বিকাশ স্ন্যাপশট সংস্করণ ব্যবহার করছিলাম।
উত্তর:
তুমি ব্যবহার করতে পার:
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: এম্বেড করা ফর্মে কিছু এজাক্স ফাংশন কাজ করে নি। উদাহরণস্বরূপ যদি আপনার এমন একটি ক্ষেত্র রয়েছে যার সীমাহীন মান থাকতে পারে, যাতে আপনার একটি 'অন্য আইটেম যুক্ত করুন' বোতাম থাকে বা আপনার ফর্মটিতে যদি কোনও আপলোড ফাইল ক্ষেত্র থাকে, তারা কাজ করে না।
কার্যতালিকা 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
'ed $form
:
module_load_include('inc', 'node', 'node.pages');
$form = node_add('program_registration');
return $form;