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


10

ফর্মটিতে ব্যবহারকারী সত্তার কাছে আমার চারটি সত্তা রেফারেন্স ক্ষেত্র রয়েছে। হোস্ট ফর্ম হ'ল নোড সম্পাদনা ফর্ম। এর মধ্যে তিনটি নির্বাচনী তালিকা, সর্বশেষে ইনলাইন সত্তা ফর্ম

আইইএফ এর মাধ্যমে একটি ব্যবহারকারী সত্তা যুক্ত করার পরে আমি নির্বাচিত তালিকার মানগুলি আপডেট করার চেষ্টা করছি:

function ebep_users_feature_users_list_ajax($form, $form_state) {

  $ief = array_shift($form_state['inline_entity_form']);
  $options = array('_node' => t('- None -'));
  $commands = array();

  foreach($ief['entities'] as $data) {
    $options[$data['entity']->uid] = $data['entity']->name;
  }

  foreach(_ebep_users_feature_getUserListFieldNames() as $fieldName) {
    $form[$fieldName]['und']['#options'] = $options;
    $commands[] = ajax_command_replace('#'.$fieldName.'_wrapper', drupal_render($form[$fieldName]));
  }

  return array('#type' => 'ajax', '#commands' => $commands);
}

এটি কার্যকর হয়, তবে যখন আমি আইআইএফ-এর মাধ্যমে অন্য কোনও ব্যবহারকারীকে যুক্ত করার চেষ্টা করি তখন আমি পাচ্ছি:

একটি অবৈধ পছন্দ সনাক্ত করা হয়েছে। সাইট এডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।


Relatedডানদিকে তালিকাভুক্ত এখানে যে কোনও প্রশ্নের সমাধান হয়েছে?
জিমাজাম্মা

@ জিমাজাম্মা মনে হয় এজ্যাক কলব্যাক ফর্ম পুনর্নির্মাণ কাজ নয়। আমি কীভাবে এটি সক্ষম করতে পারি? $ form_state ['পুনর্নির্মাণ'] = সত্য কিছুই করবেন না ...
কোডিয়াম

@ জিমাজাম্মা তাই সম্পর্কিত সমাধানগুলি কাজ করে না
কোডিয়াম

আমি এখানে আপনার প্রশ্নের উত্তর দিয়েছি কারণ এটি একটি সদৃশ প্রশ্ন drupal.stackexchange.com/questions/15989/…
সিনা সালেক

উত্তর:


15

--- আসল উত্তর। ভুল, নীচে আপডেট চেক করুন।

সবেমাত্র সেট

$bla['#validated'] = TRUE

নির্বাচন করতে গেলে এজেএক্সের সাথে আপডেট করা হবে।

চেকআউট "অবৈধ পছন্দ সনাক্ত করা হয়েছে"

--- আপডেট 17 ডিসেম্বর 2019 ---

আসলে যে ভাল পরামর্শ ছিল না, যে দীর্ঘ সময় আগে ছিল, এখন আমি আরও ভাল জানি।

অ্যাজাক্স কলব্যাক ফাংশনটি পরিবর্তিত রূপের কিছু অংশ বা কিছু এজাক্স কমান্ড কেবল ফেরত দেওয়ার কথা।

এই ক্ষেত্রে ফর্ম পরিবর্তনটি ফর্ম ফাংশন বা ফর্ম অল্টার হুকের উপর করা আবশ্যক। ফর্ম বিল্ডিং এবং বৈধতা ফাংশন প্রতিটি সময় একটি এজ্যাক্স কলব্যাক কল করা হয়। আপনার ফর্ম বিল্ড বা ফাংশন পরিবর্তন করতে কেবল $ form_state পরীক্ষা করুন এবং সেই অনুযায়ী মানগুলি সামঞ্জস্য করুন।

ত্রুটির সমাধান করুন দেখুন "একটি অবৈধ পছন্দ সনাক্ত করা হয়েছে ..."


1
যদি আমার ভাল মনে থাকে তবে আমি এটি চেষ্টা করেছিলাম, আমার ক্ষেত্রে সাফল্য ছাড়াই, ধন্যবাদ
কোডিয়াম

1
আমি ভয় করি এটি আমার পক্ষে কাজ করে না।
কেভিন.কোয়েল

এটি কি ফর্মটি কম সুরক্ষিত করে না?
বিনি

হ্যাঁ, পূর্ববর্তী সমস্ত মন্তব্য সঠিক। উত্তর আপডেট করা হয়েছে।
জামাইলসিলভা

3

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

আপনি যা করতে পারেন তা এখানে

  1. যদি সম্ভব হয় তবে ফিল্ড এপিআই-তে থাকা সমস্ত সম্ভাব্য মান সন্নিবেশ করানোর চেষ্টা করুন, আপনাকে সেই ক্ষেত্রটি সম্পাদনা করতে হবে এবং তারপরে আপনি যখন মানগুলি পরিবর্তন করবেন তখন আপনাকে নিশ্চিত করতে হবে যে কেবলমাত্র তালিকাভুক্ত মানগুলি তালিকায় রয়েছে।
  2. যে সমাধানটি আমি প্রয়োগ করেছি তা হ'ল, আপনি ফিল্ডের ধরণটি নির্বাচন তালিকা থেকে পাঠ্য ক্ষেত্রের ক্ষেত্রে ফিল্ড এপিআই থেকে পরিবর্তন করতে পারেন এবং দ্রুপালকে মানটি যেমন সংরক্ষণ করতে চান তেমন করতে পারেন। এখন, ফর্ম রানটাইমের সময়, আপনাকে ফর্মটি পরিবর্তন করতে হবে, তালিকা নির্বাচন করতে টাইপটি পরিবর্তন করতে হবে এবং বিকল্পগুলির মধ্যে চাপ দিতে হবে, যা আপনি চান। পাশাপাশি জমা দেওয়ার সময়, আপনাকে ক্ষেত্রের জন্য প্রয়োজনীয় সঠিক মান নির্ধারণ করতে হবে, এটি ডিবিতে সংরক্ষণ করা হবে। নিশ্চিত হয়ে নিন যে আপনার জমা হ্যান্ডলারটি ডিফল্ট ফর্ম হ্যান্ডলার জমা দেওয়ার আগে ডেকে আনা হয়েছে, এজন্য আপনি ব্যবহার করতে পারেনarray_merge

যদি প্রথম সমাধানটি আপনার পক্ষে কাজ করে তবে আপনি কোডিং এবং পরীক্ষার জন্য অনেক সময় সাশ্রয় করবেন। তবে যদি ড্রপ ডাউনের তালিকাগুলি গতিশীল হয় এবং এটিতে আপনার কোনও নিয়ন্ত্রণ না থাকে, তবে আপনাকে দ্বিতীয় সমাধান সহ যেতে হবে।

আপনি যদি কোনও সমস্যার মুখোমুখি হন তবে পোস্ট করুন, আমি আমার প্রজেক্টের জন্য এই সমস্যাটিতে বেশ কাজ করেছি, এবং আমি ~ 50 ডলারের জন্য করেছি, পিএইচইউউইউ !!! :)


3

আমি সেরা #valueতালিকাটি খুঁজে পেয়েছি এটি নির্বাচিত তালিকায় সেট করা ।

আমাদের যদি ফর্মস্টেটে মান থাকে এবং এটি আমাদের বিকল্পগুলিতে থাকে তবে আমরা ত্রুটি পাব না। যদি আমাদের মান অপশনগুলিতে না থাকে তবে আমাদের বিকল্পগুলির মধ্যে প্রথম বিকল্পটি নির্বাচন করুন এবং এটি ব্যবহার করুন।

$form['example'] = array(
    '#type' => 'select',
    '#title' => t('Example'),
    '#options' => $options,
    '#value' => isset($form_state['values']['example']) && in_array($form_state['values']['example'],$options)?$form_state['values']['example']:key($options),
  );

2

আমার সমাধান:

/**
 * Implements hook_form_FORM_ID_alter()
 */
function ebep_users_feature_form_ebep_exhibitor_profile_node_form_alter(&$form, &$form_state, $form_id) {

  foreach(_ebep_users_feature_getUserListFieldNames() as $fieldName) {
    $form[$fieldName]['und']['#prefix'] = '<div id="'.$fieldName . '_wrapper">';
    $form[$fieldName]['und']['#suffix'] = '</div>';
    $form[$fieldName]['und']['#options'] = _ebep_users_feature_getOptionsValuesFromIEFList($form_state);
  }

  $form['#attached']['css'] = array(
    drupal_get_path('module', 'ebep_users_feature') . '/assets/styles.css',
  );

  $form['#attached']['js'] = array(
    drupal_get_path('module', 'ebep_users_feature') . '/assets/scripts.js',
  );

  $form['users_refresh'] = array(
    '#type' => 'submit',
    '#value' => t('Refresh users list'),
    '#ajax' => array(
      'callback' => 'ebep_users_feature_users_list_ajax',
    ),
  );
}

function ebep_users_feature_users_list_ajax($form, $form_state) {

  $commands = array();

  foreach(_ebep_users_feature_getUserListFieldNames() as $fieldName) {
    $form[$fieldName]['und']['#options'] = _ebep_users_feature_getOptionsValuesFromIEFList($form_state);
    $commands[] = ajax_command_replace('#'.$fieldName.'_wrapper', drupal_render($form[$fieldName]));
  }

  return array('#type' => 'ajax', '#commands' => $commands);
}

function _ebep_users_feature_getOptionsValuesFromIEFList($form_state) {
  static $options = array();

  if (empty($options)) {
    $ief = array_shift($form_state['inline_entity_form']);
    $options['_node'] = t('- None -');

    foreach($ief['entities'] as $data) {
      $options[$data['entity']->uid] = $data['entity']->name;
    }
  }

  return $options;
}

-1

আপনার এজাক্স কলব্যাকে, যুক্ত করুন:

...

drupal_get_messages();
form_get_errors();

return array('#type' => 'ajax', '#commands' => $commands);

সুরক্ষা সতর্কতা হিসাবে, মূল _form_validate()ফাংশনটি পরীক্ষা করে যে কোনও এলিমেন্টের # টিপশন কী মূল বিল্ডে (যা তাদের আছে) সেট করা হয়েছে যা থেকে পরিবর্তিত হয়েছে। কল করে drupal_get_messages()এবং form_get_errors()আমরা মূলত দ্রজালকে আমাদের এজ্যাক্স অনুরোধ চালানোর সময় কোনও ত্রুটি / বার্তা উপেক্ষা করতে বলি। :)


ত্রুটি বার্তা চলে গেছে তবে নির্বাচনের উপাদানটিতে ত্রুটি শ্রেণি রয়েছে that কীভাবে এটি সরিয়ে বা প্রতিরোধ করবেন?
তেজাস বৈদ্য

এটি আপনার গাড়ির ড্যাশ বোর্ডে একটি সতর্কতা আলোতে টেপ লাগানোর জন্য ড্রুপাল সমতুল্য।
ফ্র্যাঙ্ক রবার্ট অ্যান্ডারসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.