একটি পৃষ্ঠায় একটি "নোড অ্যাড" ফর্ম এম্বেড করুন


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 ফাইল অন্তর্ভুক্ত করতে হবে?

আমি আজাক্স উপাদানগুলির সাথে ফর্মের কোডটি ব্যবহার করতে পারি না (উদাহরণস্বরূপ: ফাইল আপলোড)। সম্ভাব্য সমাধান
ডাইমেট্রি

এম্বেড নোড ফর্মটিতে এজাক্স উপাদান ব্যবহার করার জন্য ডাইম্যাট্রি আমার উত্তর দেখুন ।
Елин Й.

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: এম্বেড করা ফর্মে কিছু এজাক্স ফাংশন কাজ করে নি। উদাহরণস্বরূপ যদি আপনার এমন একটি ক্ষেত্র রয়েছে যার সীমাহীন মান থাকতে পারে, যাতে আপনার একটি 'অন্য আইটেম যুক্ত করুন' বোতাম থাকে বা আপনার ফর্মটিতে যদি কোনও আপলোড ফাইল ক্ষেত্র থাকে, তারা কাজ করে না।

কার্যতালিকা 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';
}

ইনলাইন সত্ত্বা বিকল্প হতে পারে? আমি মডিউলটি নিয়ে ঘুরে বেড়াচ্ছি তবে সামনের প্রান্তে নোড অ্যাড ফর্মটি প্রদর্শন করতে সক্ষম হইনি, আপনি যখন নোড সম্পাদনা করেন তখনই আপনি নোড অ্যাড ফর্মটি প্রদর্শন করে এমন একটি সত্তা ক্ষেত্র সরবরাহ করতে পারেন।
অ্যালেক্সভ্যালিজো

1
ইনলাইন সত্ত্বা সত্তা রেফারেন্স ক্ষেত্রগুলির জন্য, যা এই প্রশ্নের জন্য অপ্রাসঙ্গিক।
Елин Й.

1
আপনি যদি ফাইল আপলোড ইত্যাদির জন্য hook_menu_alter () ব্যবহার করতে না চান তবে আপনি নোড ফর্মের পরিবর্তে ফর্ম function YOURMODULE_form_NODETYPE_node_form_alter(&$form, &$form_state) { form_load_include($form_state, 'inc', 'node', 'node.pages'); }
অলটারে

@ ЕлинЙ। আপনার উত্তর কি এই প্রশ্নের ক্ষেত্রে প্রযোজ্য ?
উমাইয়ার

1
@ উমাইর আমার উত্তরটি কেবল কোনও পৃষ্ঠায় নোড ফর্ম যুক্ত করার বিষয়ে। এটি এজেএক্সের মাধ্যমে ফর্মটি জমা দেবে না এবং ভিউটি আপডেট করবে না। তবে, আপনি এজেএক্স ফ্রেমওয়ার্ক ব্যবহার করে তাদের অর্জন করতে পারেন ।
Елин Й.

0

আমি যদি স্বীকৃত উত্তরের কোডটি ব্যবহার করি ...

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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.