আমি কি একটি ইনপুট থেকে একাধিক ফর্ম উপাদানগুলি লক্ষ্য করতে এজ্যাক্স ব্যবহার করতে পারি?


8

আমি মাত্র একটি ফর্ম ইনপুট অস্পষ্টতা থেকে ড্রুপাল ফর্মের দুটি পৃথক অংশ আপডেট করতে আজাক্স ব্যবহার করার চেষ্টা করছি।

আমার ইনপুটটিতে স্ট্যান্ডার্ড এজাক্স সামগ্রী রয়েছে:

$my_form['my_input']['#ajax'] = array(
  'callback' => 'my_callback',
  'wrapper' => 'my_target_div',
  'event' => 'blur',
);

এটি ভালভাবে কাজ করছে, ইনপুট আপডেট হওয়ার সাথে সাথে আমার ডিভটি অদলবদল করছে ... তবে আমি আমার মূল ইনপুটটিতে অস্পষ্টতার ফলে বিভিন্ন কোড সহ ফর্মের অন্য কোনও ফর্ম ইনপুটটি আপডেট করতে চাই।

এটি কি সম্ভব, কোনও ধারণা?

সম্পাদনা করুন: স্পষ্টতার জন্য, এখানে আমার আসল বিশ্বের উদাহরণ:

  • সামগ্রীর ধরণ 'চলচ্চিত্র'
  • ক্ষেত্র 'প্রাথমিক_শব্দ' যোগ করা হয়েছে
  • যখন 'প্রাথমিক_শিরোনাম' আপডেট করা হয় তখন আমার অজ্যাক্স কলব্যাক অনুরূপ স্ট্রিংগুলির জন্য পরীক্ষা করে এবং এইচটিএমএল ফেরত দেয়।
  • কলব্যাক থেকে এইচটিএমএল একটি খালি ডিভিতে .োকানো হয়েছে।

    সেই অংশটি দুর্দান্ত কাজ করছে!

আমি স্ট্যান্ডার্ডটি পরিষ্কার করার জন্য কিছুটা রেইগেক্স করার পরে স্ট্যান্ডার্ড নোডের 'শিরোনাম' ইনপুটটি সংশোধন করার চেষ্টা করছি, (শুরু থেকে "" বা "এ" মুছে ফেলা) ফলাফল দুটি শিরোনাম ক্ষেত্র হবে, একটি সম্পূর্ণ শিরোনাম 'প্রাথমিক_শাস্ত্র' এবং একটি ছাঁটাই 'শিরোনাম' যা রেকর্ডগুলি বাছাই এবং প্রদর্শনের জন্য দরকারী।


উত্তর:


13

এটি আজাক্স কমান্ড ব্যবহার করে আপনি কোনও ফর্মের বিভিন্ন অংশকে লক্ষ্যবস্তু করতে পারবেন বলে মনে হচ্ছে, তবে আপনাকে অবশ্যই দুটির মধ্যে একটিতে ফিরে আসতে হবে :

  • এইচটিএমএল বা

  • একটি উপস্থাপনযোগ্য অ্যারে বা

  • AJAX কমান্ডগুলির একটি অ্যারে

অবস্থা আমি মূলত লিখেছে, আমি উভয় AJAX এর কম্যান্ডের একটি অ্যারের ফিরে যাওয়ার চেষ্টা ছিল এবং একটি renderable অ্যারে, যা সম্ভব মনে হচ্ছে না।

মধ্যে Code উদাহরণ মডিউল একটি ফর্ম AJAX এর কম্যান্ডের একটি অ্যারে ব্যবহার করে বিভিন্ন স্থানে লক্ষ্য করে প্রমান:

function ajax_example_advanced_commands_html_callback($form, $form_state) {
  $text = $form_state['values']['html_command_example'];

  $commands = array();
  $commands[] = ajax_command_html('#html_div', $text);
  $commands[] = ajax_command_replace("#html_status", "<div id='html_status'>Updated html_command_example with text=$text;  " . date('r') . "</div>");
  return array('#type' => 'ajax', '#commands' => $commands);
}

এই কোডের নমুনায়, # এইচটিএমএল_ডিভ $ পাঠ্য পাচ্ছে এবং পৃথকভাবে # এইচটিএমএল_স্ট্যাটাস পেয়েছে "টেক্সট = $ পাঠ্য সহ আপডেট হওয়া এইচটিএমএল_কম্যান্ড_এক্সেমেল"। তারিখ ('আর')। ""

এক এজ্যাক্স কলব্যাক থেকে দুটি পৃথক পৃথক তথ্য সহ একটি ফর্মের দুটি পৃথক অবস্থান!

আমি কী নিয়ে কাজ করছি তা আবার দেখে আমি বুঝতে পেরেছিলাম যে নোড শিরোনাম ক্ষেত্রটি আমার মোটেও ফেরানোর দরকার নেই। এটি কেবল একটি ইউটিলিটি ক্ষেত্র হবে, যা তালিকায় ডেটা বাছাইয়ের জন্য ব্যবহৃত হয়।

আমি ক্ষেত্রটি নোড ফর্মটিতে লুকিয়ে রেখেছি এবং আমার ফর্মটি দ্বিতীয়বার তৈরি হওয়ার পরে এটি তৈরি করা হবে যখন আমার আসল অজ্যাক্স কলব্যাক ট্রিগার হয়।


0

আমি দ্রুপালের কাছে বেশ নতুন তবে এখনও পর্যন্ত আমি অ্যাজাক্স কাঠামোটিকে বরং নমনীয় বলে মনে করেছি। এটি যতক্ষণ আপনি এটি যেমন ব্যবহার করেছিলেন ততক্ষণ তা দুর্দান্ত কাজ করে। সুতরাং আপনার উদাহরণস্বরূপ যদি আপনি কিছু জেএস জানেন তবে সবচেয়ে ভাল সিদ্ধান্তটি হ'ল সেই স্ক্রিপ্টটিকে নিজের তৈরি করা খুব হালকা হওয়া উচিত।

শুভকামনা!


পরামর্শের জন্য ধন্যবাদ :) আমি বুঝতে পেরেছি যে নোড শিরোনাম ক্ষেত্রটি আমার মোটেও ফেরার দরকার নেই কারণ এটি তালিকাগুলি সাজানোর জন্য কেবল ইউটিলিটি ক্ষেত্র হিসাবে ব্যবহৃত হচ্ছে। এটি উপস্থিত হয়ে যায় যখন আমার বিদ্যমান অজ্যাক্স কলব্যাকের ফলাফল হিসাবে আমার ফর্মটি পুনর্নির্মাণ করা হয়।
রিক

0

আর একটি বিকল্প, drupal.org থেকে :

যদি এটি সহজ হয় তবে আপনি সহজেই পুরো ফর্মটি প্রতিস্থাপন করতে পারেন। পুরো ফর্ম অ্যারেটিতে কেবল একটি # প্রাকফিক্স এবং # সুফিক যোগ করুন, তারপরে এটিকে # জাজাক্স ['র‍্যাপার'] হিসাবে সেট করুন। (এটি আপনাকে একক আজাক্স কলের মাধ্যমে একাধিক ফর্ম উপাদান পরিবর্তন করতে দেবে)) এটি না করার একমাত্র কারণ হ'ল কম তথ্য স্থানান্তর করা হলে প্রক্রিয়াটি দ্রুত হয়।

আপনার কলব্যাক ফানসিটন এত সহজ হতে পারে:

function _callback($form, $form_state) {
  return $form;
}

এটিকে (বা নীচে উদাহরণস্বরূপ) একটি (বা কোনও ধরণের ফর্ম অল্টার হুক) সংজ্ঞায়িত #ajaxফর্ম উপাদানের অ্যারে থেকে কল করা উচিত যেখানে আপনি পরীক্ষা করে অ্যারেতে পরিবর্তনও করেন , যেমন:field_whateverhook_form_FORM_ID_alter()$form_state$form

 if (isset($form_state['values']['field_whatever'])){
     $form['field_something']['#disabled'] = TRUE;
     $form['field_something_else']['#disabled'] = FALSE;
 } else {
     $form['field_something']['#disabled'] = FALSE;
     $form['field_something_else']['#disabled'] = TRUE;
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.