কেবলমাত্র একটি # জ্যাক্স ট্রিগার উপাদান দ্বারা ট্রিগারযুক্ত একাধিক ফর্ম উপাদান (মোড়ক) প্রতিস্থাপন করা সম্ভব?


52
function ajax_example_simplest($form, &$form_state) {

  //This is my ajax trigger element
  $form['element_trigger'] = array(
    '#type' => 'select',
    '#options' => array(
      'one' => 'one',
      'two' => 'two',
      'three' => 'three',
    ),
    '#ajax' => array(
      'callback' => 'ajax_example_simplest_callback',

      /** Q: Can I somehow declare more than one wrapper? **/
      //Say for instance, something like:
      'wrapper' => array('replace_div_1', 'replace_div_2'),

     ),
  );

  //replace_div_1
  $form['element_to_be_replaced_1'] = array(
    '#type' => 'textfield',
    '#title' => t("My conditional field one"),
    '#prefix' => '<div id="replace_div_1">',
    '#suffix' => '</div>',
  );


 //... more form elements here

  //replace_div_2
  $form['element_to_be_replaced_2'] = array(
    '#type' => 'textfield',
    '#title' => t("My conditional field two"),
    '#prefix' => '<div id="replace_div_2">',
    '#suffix' => '</div>',
  );
  return $form;
}

function ajax_example_simplest_callback($form, $form_state) {

  //... do my stuff here


  //normally I would return only the form bit for replacing a single wrapper
  //declared in the trigger element, like this:
  return $form['element_to_be_replaced_blahblah'];

}

AJAX ফ্রেমওয়ার্কটি $form['element_to_be_replaced_1']প্রতিস্থাপন করা উচিত <div id="replace_div_1">এবং প্রতিস্থাপন করা উচিত বলার মাধ্যমে কলব্যাক ফাংশনে একাধিক ফর্ম বিট ফেরানো কি সম্ভব ?$form['element_to_be_replaced_2']<div id="replace_div_2">

উত্তর:


73

আপডেট করার জন্য একক উপাদানটির এইচটিএমএল ফিরিয়ে দেওয়ার পরিবর্তে, আপনার অজ্যাক্স কলব্যাকটি আজাক্স কমান্ডের একটি অ্যারে ফিরিয়ে দিতে পারে । সুতরাং এটি প্রতিটি উপাদান প্রতিস্থাপন করতে দুটি আজ্যাক্স_কম্যান্ড_প্লেস ফিরিয়ে দিতে পারে।

function ajax_example_simplest_callback(&$form, $form_state) {
  return array(
    '#type' => 'ajax',
    '#commands' => array(
      ajax_command_replace("#replace_div_1", render($form['element_to_be_replaced_1'])),
      ajax_command_replace("#replace_div_2", render($form['element_to_be_replaced_2']))
    )
  );
}

2
এটা দুর্দান্ত এক !! অনেক সময় বাঁচিয়েছে। আপনাকে অনেক ধন্যবাদ :)
সন্দেশ যাদব

24 ঘন্টা আপনার পথে একটি অনুগ্রহ আসছে।
আইশক

কলব্যাক ফাংশনের নাম পরিবর্তন করতে হয়েছিল। আজাক্স_সেম্পল_সম্প্লেস্ট_ক্যালব্যাক (& $ ফর্ম, $ ফর্ম_স্টেট) function function ফাংশন ব্যবহার করে আমাকে মৃত্যুর সাদা পর্দা দিয়েছে।
ঘোটি

5

ড্রুপাল 8 বিকল্প সিনট্যাক্স

use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\ReplaceCommand;

class name extends FormBase{
   function ajax_example_simplest(array $form, FormStateInterface &$form_state) {
       $response = new AjaxResponse();
       $response->addCommand(new ReplaceCommand("#replace_div_1", ($form['element_to_be_replaced_1'])));
       $response->addCommand(new ReplaceCommand("#replace_div_2", ($form['element_to_be_replaced_2'])));
       return $response;
   }
}

একটি ভিন্নতা হ'ল রেন্ডার কমান্ডটি বাদ পড়েছে, কারণ অ্যাজাক্সেস্পোনস ড্রপাল \ কোর \ রেন্ডার \ সংযুক্তি ইন্টারফেস প্রয়োগ করে

রেন্ডার করুন ($ ফর্ম ['এলিমেন্ট_ টু_বে_প্রেসিত_1'])

রেন্ডার যুক্ত করা এখনও কাজ করে, তবে সেইভাবে কোনও টেবিলসিলিট সারণী আপডেট করার সময় আমার সমস্যা হয়েছিল।


ধন্যবাদ এটি কাজ করে। আমি মনে করি রেন্ডার () ব্যবহার করা বুদ্ধিমানের কাজ হবে না কারণ ড্রুপাল ডকুমেন্টেশনগুলিতে বলা হয়েছে যে এর চিত্রিত 9 এবং দ্রুপাল 9-এ পাওয়া যাবে না
নাগাটিয়া ফ্র্যাঙ্কলাইন

4

পিয়ের বুয়েলের উত্তর আমার পক্ষে কার্যকর হয়নি। তবে নীচের মতো কিছু কাজ করেছে।

function ajax_example_simplest_callback(&$form, $form_state) {
    $commands = array();
    $commands[] = ajax_command_replace("#replace_div_1", render($form['element_to_be_replaced_1']));
    $commands[] = ajax_command_replace("#replace_div_2", render($form['element_to_be_replaced_2']));
    $page = array('#type' => 'ajax', '#commands' => $commands);
    ajax_deliver($page);
}

AJAX কমান্ডের অ্যারেটি ফিরিয়ে দেওয়ার পরিবর্তে অজেক্স_ডেলিভারকে কল করুন Note


2
আমার ধারণা আপনি নিজের ফর্মটিতে # জ্যাক্স ['পথ'] ব্যবহার করছেন। সেক্ষেত্রে আপনার হুক_মেনু বাস্তবায়নে আপনার 'ডেলিভারি কলব্যাক' সম্পত্তিটি ব্যবহার করা উচিত, এটি দ্রুপালকে মার্কআপের পরিবর্তে এজেএক্স কমান্ড হিসাবে আপনার পৃষ্ঠা কলব্যাকের ফলাফলটি রেন্ডার করতে নির্দেশ দেবে। তবে এটি সরাসরি আপনার পৃষ্ঠার কলব্যাকে ব্যবহার করে আপনি সাধারণ দ্রুপাল পৃষ্ঠার বিতরণকে বাইপাস করেন।
পিয়েরে বুয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.