এজেএক্স ব্যবহার করে কীভাবে একটি ফর্মটি বৈধতা এবং জমা দিতে হবে?


12

আমি ফর্ম এপিআই ব্যবহার করে একটি ওয়েবফর্ম তৈরি করেছি। আমি #AJAXপ্রতিটি ক্ষেত্রে AJAX বৈধতা যুক্ত করতে ক্ষেত্র বিকল্পটি ব্যবহার করছি ।

পৃষ্ঠাটি পুনরায় লোড না করে এজেএক্স ব্যবহার করে ফর্মটি বৈধকরণ এবং জমা দেওয়া সম্ভব? যদি বৈধতা ব্যর্থ হয় আমি একটি ত্রুটি বার্তা দেখাতে চাই এবং যদি বৈধতা সফল হয় তবে আমি একটি বার্তা (আদর্শভাবে একটি লাইটবক্সে) প্রদর্শন করতে চাই এবং ফর্ম ক্ষেত্রগুলি পুনরায় সেট করতে চাই।

আমার কোড এখন পর্যন্ত:

$form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
    '#default_value' => '',
    '#maxlength' => '128',
    '#required' => TRUE,
    '#ajax' => array(
        'callback' => '_validate_name',
        'wrapper' => 'name-error-icon-container',
        'method' => 'html',
        'effect' => 'none',
        'progress' => array(
            'message' => NULL,
        ),
    ),
);

$form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
    '#ajax' => array(
        'callback' => '_handle_form_submit',
        'effect' => 'fade',
    ),
);

কলব্যাক ফাংশনগুলি দেখতে এইরকম:

function _validate_name($form, $form_state) {

    if ($form_state['values']['name'] != '') {
    $output = 'OK';
    }
    else {
      $output = 'Enter a value';
    }

   return $output;

}

function _handle_form_submit($form, $form_state) {
}

তবে আমি নিশ্চিত নই যে _handle_form_submitফাংশনে যাচাই করতে হবে এবং তারপরে কোনও বার্তা ফিরবে বা ফর্ম জমা দিন এবং ক্ষেত্রগুলি পুনরায় সেট করবেন?

উত্তর:


-2

উদাহরণ মডিউল একটি AJAX ফর্ম যে আপনার হিসাবে অনেক পাশাপাশি অন্যদেরও পাঠাতে পারেন আছে। কোড সংগ্রহস্থলটিতে এজাক্স ফর্মের উদাহরণের একটি লিঙ্ক এখানে দেওয়া হয়েছে , তবে আমি নিজেই যাইহোক বাস্তবায়নটি দেখার জন্য ডাউনলোড করার পরামর্শ দিচ্ছি।


1
দুঃখিত - আমি উদাহরণ মডিউলে আজাক্সি বৈধকরণের কোনও উদাহরণ খুঁজে পাচ্ছি না
এরিকবিএসচুলজ

হ্যাঁ, এটি ঠিক সেখানে একটি ফুল ফোটানো উত্তর। আমি আসলে সেখানে কোন বৈধতা দেখতে পাচ্ছি না। প্রতিটি কলব্যাক সহজভাবে ফর্মটি ফেরত দেয়।
AlxVallejo

2
এটি কীভাবে গৃহীত উত্তর? এমনকি প্রদত্ত লিঙ্কটি কোথায় দেখতে হবে তাও বলা হয় না (এবং লিঙ্কটিতে বৈধতার উদাহরণ নেই) example
রবিনমিত্র


আমি আমার উত্তরটি একটি উইকি তৈরি করেছি, যেহেতু এটি গৃহীত তবে নিম্নমানের
rocketeerbkw

11

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

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

function ex_form($form, $form_state) {
  $form['name'] = array(
    '#type' => 'textfield',
     '#title' => t('Name'),
     '#default_value' => '',
     '#maxlength' => '128',
     '#required' => TRUE,
  );

  $form['submit'] = array(
   '#type' => 'submit',
   '#value' => 'Submit',
   '#ajax' => array(
     'callback' => 'ex_form_ajax_handler',
     'effect' => 'fade',
   ),
  );
}

function ex_form_submit(&$form, &$form_state) {
  // Submit logic - runs when validation is ok
  // You can alter the form here to be just a markup field if you want.
}

function ex_form_validate(&$form, &$form_state) {
  // Validation logic - invalidate using form_set_error() or form_error()
}

function ex_form_ajax_handler(&$form, &$form_state) {
  return $form;
}

সম্ভবত সেরা উত্তর
অ্যান্ড্রু কোজরিজ 4'18

আপনি কি বলছেন যে বৈধতা জমা দেওয়ার পদ্ধতিগুলি জমা দেওয়ার বোতামে স্বয়ংক্রিয়ভাবে একটি এজেএক্স কলব্যাকের জন্য কল করা হবে? পদ্ধতিগুলিকে কোন ক্রমে ডাকা হয়?
জেফ

3

আমি মনে করি 17 অক্টোবর, 2011-এ maxtorete এর পোস্টটিform_validate() এবং উভয়ই ব্যবহার করে একটি পূর্ণ উদাহরণ দেয়form_submit()

(আমি এখনও এটি পরীক্ষা করি নি।)

এছাড়াও স্ট্যাক ওভারফ্লোতে জোশুয়া স্টিওয়ার্ডসনের জবাব একটি দুর্দান্ত কাজের উদাহরণ রয়েছে:

function dr_search_test_form($form, &$fstate) {

  $form['wrapper'] = [
    '#markup' => '<div id="test-ajax"></div>',
  ];

  $form['name'] = [
    '#type'     => 'textfield',
    '#required' => TRUE,
    '#title'    => 'Name',
  ];

  $form['submit'] = [
    '#type'  => 'submit',
    '#value' => 'Send',
    '#ajax'  => [
      'callback' => 'dr_search_test_form_callback',
      'wrapper'  => 'test-ajax',
      'effect'   => 'fade',
    ],
  ];

  return $form;
}

function dr_search_test_form_callback($form, &$fstate) {

  return '<div id="test-ajax">Wrapper Div</div>';
}

function dr_search_test_form_validate($form, &$fstate) {

  form_set_error('name', 'Some error to display.');
}

জোশুয়া বিষয়টি উল্লেখ করেছে যে বৈধতা ত্রুটি বার্তাগুলি #ajax['wrapper']উপাদানটিকে পুরোপুরি প্রতিস্থাপন করে যাতে আপনার কলব্যাকটি পুনঃস্থাপন করার সাথে সাথে এই উপাদানটি পুনরায় সাপ্লাই করা প্রয়োজন।


সেই লিঙ্কটি যখন এটি বাতিল করে দেয় তখন প্রশ্নটি আর প্রাসঙ্গিক হয় না!
এরিচবিচুল্জ

2
ডাউন ভোট কিছুটা কঠোর - যদিও এটি কেবল একটি লিঙ্ক ছিল - এটি উত্তরের একটি লিঙ্ক ছিল - কেবল উত্তর নেই এমন কোনও মডিউলের লিঙ্ক নয় - গৃহীত উত্তরের বিপরীতে !! যাইহোক আমি ডাউনটিভোট হওয়ার সময় কিছু কাজের কোড সরবরাহ করেছি।
এরিকবিএসচুল্জ

ধন্যবাদ @ এমবম্ব007 - এখনই ঠিক হয়েছে
এরিচবিএসচুল্জ

2

সাধারণভাবে, বৈধতা এবং ফর্ম জমা দেওয়ার হ্যান্ডলিংটি স্বাভাবিক _ বৈধ () এবং _ সাবমিট () কলব্যাকগুলিতে হওয়া উচিত। ধারণাটি হল যে ফর্মগুলির এখনও অজ্যাক্স ছাড়াই কাজ করা উচিত।

খুব সুন্দরভাবেই কেবলমাত্র #ajax কলব্যাকগুলি করা উচিত সংজ্ঞায়িত মোড়ক অনুযায়ী পরিবর্তিত হওয়া ফর্মের অংশটি ফিরে আসা।


2
আপনার কথার সাথে সাবধানতা অবলম্বন করুন। কলব্যাকটি ফর্ম_স্টেট থেকে পুনর্নির্মাণ পুরো ফর্মটি ফিরিয়ে আনবে। ফর্মটির পার্ট রিটার্নিং হ'ল বৃহত্তম দ্রুপাল / এএএএচএইচ ভুল ধারণা। দেখুন katbailey.net/blog/ahah-drupal-may-it-one-day-live-its-acronym

7
এই প্রশ্নটি দ্রুপাল 7 সম্পর্কে ... এএএএএচআর আর দ্রুপালে নেই। #ajaxড্রুপাল 7 -তে একটি কলব্যাক ফাংশনে আপনি কেবল যে ফর্মটি প্রতিস্থাপন করতে চান তার অংশটি ফিরিয়ে দেন।
ক্লাইভ

1
@ChrisD। ক্লাইভ যেমনটি উল্লেখ করেছেন, এটি ড্রুপাল is এবং এখন আমাদের কাছে একটি দুর্দান্ত এজ্যাক্স ফ্রেমওয়ার্ক রয়েছে যা একাধিক পৃথক ফর্ম অংশগুলি ফেরত দেওয়ার মতো সব ধরণের অভিনব জিনিসগুলি করতে দেয়।
বারদির

@ ক্লাইভ আমি অজ্যাক্স সম্পর্কিত আরেকটি সমস্যা পেয়েছি drupal.stackexchange.com/a/142316/19205 যেখানে লেখক "আইটেম_কাউন্ট পরিবর্তিত হওয়ার পরে ফর্মটি আবার তৈরি করা দরকার" যা ডি 7 এর জন্যও উল্লেখ করেছেন। আমি বিভ্রান্ত হয়ে পড়েছি, কোন বক্তব্যটি সঠিক (কে সঠিক :-) বিতর্ক না করে)। আপনি কি এই সম্পর্কে কিছু তথ্য ভাগ করতে পারেন?
কিরণিং

0

দুটি উপায় আছে

1)

function abc_form_validate(&$form, &$form_state) {
  // Validation logic - invalidate using form_set_error() or form_error()
}

function abc_form_ajax_handler(&$form, &$form_state) {
  return $form;
}

2) উদাহরণ মডিউল http://cgit.drupalcode.org/example/tree/ajax_example/ajax_example.module?id=refs/heads ;id2=7.x-1.x#l402


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

সঠিকভাবে বিন্যাসিত কোড কোনও উত্তর মুছার কারণ নয়। এটি ঠিক করার জন্য এটির জন্য বিশেষাধিকারের ব্যবহারকারী প্রয়োজন।
কিমলালুনো

আমি আসছি, মরিয়া হয়ে, সমাধানের সন্ধান করতে, এই উত্তরের মাত্র 2 বছর পরে, একটি লিঙ্ক ক্লিক করেছি যা আমাকে অ-বিদ্যমান গাছ / শাখায় নিয়ে যায়। দয়া করে উত্তরের লিঙ্কগুলি ব্যবহার করবেন না, বা আপনি লেখার সময় সামগ্রীটি আটকান।
ম্যাককে

0

আমার ক্ষেত্রে, একটি ব্যবহার submitধরন, সৃষ্ট ফর্ম সবসময় জমা দিতে তাই আমি তা পরিবর্তিত buttonসঙ্গে #ajaxনির্দিষ্ট করা হয়েছে। তারপরে, আমাকে আমার বৈধতাটি অজাক্স কলব্যাকে করতে হয়েছিল।

আমি একটি টটুলস ফলক তৈরি করছিলাম; আমি জানি না যে এটি এর মধ্যে খেলে কিনা।

function mymodule_form($form, &$form_state) {
  ...
  $form['button'] = array(
    '#type' => 'button',
    '#value' => t('Subscribe'),
    '#ajax' => array(
      'callback' => '_mymodule_ajax',
    ),
  );
  return $form;
}

function _mymodule_ajax($form, &$form_state) {
  if ( ! valid_email_address($form_state['values']['email']) ) {
    form_set_error($form, t('Please enter a valid email address.'));
  } else {
    $form = array(
      '#markup' => t('You have subscribed.'),
    );
  }
  return $form;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.