আপনি কীভাবে একটি ফর্ম ত্রুটি পরিবর্তন করবেন?


8

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

আমি হুক_নোড_যুক্তি () চেষ্টা করেছি , তবে আমি যা করতে পেরেছিলাম তা হ'ল ত্রুটি পাওয়া এবং ত্রুটিগুলি সেট করা।

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


13

পরিবর্তনশীল স্ট্রিং

একটি একক স্ট্রিংয়ের পাঠ্য পরিবর্তন করতে, স্ট্রিং ওভাররাইড মডিউলটি ব্যবহার করা সবচেয়ে সহজ পদ্ধতি। এটি আপনাকে স্ট্রিং প্রতিস্থাপন করতে দেয়:

"! নাম ক্ষেত্র প্রয়োজন।"

(উদাহরণস্বরূপ) সহ:

"ক্ষেত্র '! নাম' আবশ্যক।"

ফর্ম ক্ষেত্র পরিবর্তন

আপনি যদি ক্ষেত্রের প্রয়োজন না তৈরি করতে চান তবে একটি সাধারণ হুক_ফর্ম_ল্টার () প্রয়োগ করুন:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function mymodule_form_node_form_alter(&$form, &$form_state) {
  $node = $form['#node'];
  if ($node->type == 'my_custom_type') {
    $form['title']['#required'] = FALSE;
  }
}

কোনও ফর্ম যাচাই করার উপায় পরিবর্তন করা

ফর্মগুলির $form['#validate']অ্যারেতে নির্দিষ্টকরণের কার্যকারিতা রয়েছে । এবং ফর্ম উপাদানগুলিতে নির্দিষ্ট ফাংশন রয়েছে $form['element_key']['#element_validate']

আপনি নিজের মত এটি নির্দিষ্ট করতে পারেন:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function mymodule_form_node_form_alter(&$form, &$form_state) {
  $form['title']['#element_validate'][] = 'mymodule_validate_node_title';
}

/**
 * Validate the node title to prevent ALL CAPS.
 */
function mymodule_validate_node_title($element, &$form_state, $form) {
  if (preg_match('/^[A-Z]+$/', $element['#value'])) {
    form_error($element, t('You may not enter titles in ALL CAPS.'));
  }
}

দুর্দান্ত উত্তর! আপনি কীভাবে ত্রুটির পাঠ্য পরিবর্তন করতে যাবেন - "শিরোনাম ক্ষেত্র প্রয়োজন" " (প্রশ্নে চিত্রিত হিসাবে)? এটি স্ট্রিং ওভাররাইড ব্যবহার না করেই।
timofey.com

অন্য কথায়, আমি বৈধতা যুক্ত করতে চাই না, আমি কেবল একটি বিদ্যমান বৈধতার ত্রুটি বার্তাটি সংশোধন করতে চাই .... সম্ভবত বিদ্যমান বৈধতাটি আনসেট করে একটি নতুন যুক্ত করতে পারি?
timofey.com

1
বিদ্যমান বৈধতা বৈধতা কলব্যাক ফাংশন নয়; কেবলমাত্র ক্ষেত্রটি "প্রয়োজনীয়"। আমার উপরের দুটি শেষের সংমিশ্রণটি বিদ্যমান বার্তাটি সরিয়ে ফেলবে এবং তারপরে অন্য ধরণের বৈধতা যুক্ত করবে।
pjcdawkins

আমার কেবলমাত্র একটি বৈধতা বার্তা পরিবর্তন করতে হবে। যদিও আমি উপরের সমাধানটি প্রয়োগ করেছি (হুক_ফর্ম_ল্টার দ্বারা)। আমি দুটি বৈধতা বার্তা পাচ্ছি। 1 আমি একটি ডিফল্ট এবং দ্বিতীয় যে আমি লিখেছি। @Pjcdawkins- এর যে কোনও পরামর্শ
উদ্ভাবনী কুন্দন

6

যেহেতু সেই ত্রুটি বার্তার জন্য ব্যবহৃত স্ট্রিংটি "! নাম ক্ষেত্রের প্রয়োজন"। স্ট্রিং ওভাররাইড মডিউল ব্যবহার করা বা সেটিংস.পিএফপি ফাইলটিতে স্ট্রিংটি ব্যবহার করতে প্রতিটি প্রয়োজনীয় ফর্ম ক্ষেত্রে ব্যবহৃত স্ট্রিংটি পরিবর্তন করতে প্রভাব ফেলবে।

শিরোনামটি প্রবেশ না করা অবস্থায় আপনি যদি শিরোনামটির জন্য প্রদর্শিত ত্রুটিযুক্ত স্ট্রিংটি পরিবর্তন করতে চান তবে আপনি এটি করতে পারেন:

  • নোড সম্পাদনা ফর্মটি ব্যবহার করে একটি ফর্ম বৈধতা হ্যান্ডলার যুক্ত করুন hook_form_alter()
  • সেই ফর্মটিতে বৈধতা হ্যান্ডলার:

    • এর সামগ্রীটি $form['title']( $formযা ব্যবহার করে সেট করা আছে তা যাচাই করুন $form = &drupal_static('form_set_error', array());এবং এটি যখন আপনি চাইলে স্ট্রিংয়ে পরিবর্তন করুন'Title field is required.'
    • যাচাই করুন $_SESSION['messages']['error'](একটি অ্যারে) স্ট্রিং রয়েছে 'Title field is required.'এবং এটি আপনি যে স্ট্রিংটি প্রদর্শন করতে চান তাতে পরিবর্তন করুন

ত্রুটিটি দেখাতে এড়ানো সহজ: কেবলমাত্র #requiredসম্পত্তিটিকে সেট করুন FALSE, এবং দ্রুপাল সেই ত্রুটি বার্তাটি প্রদর্শন করবে না।


4

ড্রুপাল 7 এর জন্য আপনি এই মডিউলটি http://drupal.org/node/1209450 জিপটিতে ডাউনলোড করতে পারেন এটি আপনাকে এই হুক দেবে।

message_alter(&$messages) {
}

ধন্যবাদ। অসমর্থিত মডিউলটি ব্যবহার করা সম্ভবত ভাল ধারণা নয়, তবে এটি গাইড হিসাবে ব্যবহার করা যেতে পারে!
টিমোফের.কম

1

প্রতি সত্তা ক্ষেত্রের ক্ষেত্রে ক্ষেত্রের বৈধতা ব্যবহার করে আপনি ফর্ম ত্রুটি বার্তাগুলি কাস্টমাইজ করতে পারেন ।

এটি করার জন্য, ফিল্ড সেটিংস সম্পাদনা করুন, বৈধকরণে যান এবং একটি নতুন বৈধকরণের নিয়ম যুক্ত করুন ( প্রয়োজনীয় ক্ষেত্র )। সেখানে, আপনার ক্ষেত্রে সেই ক্ষেত্রটির জন্য কাস্টম ত্রুটি বার্তা সেট আপ করার জন্য পাঠ্য ক্ষেত্র থাকা উচিত।


0

ড্রুপাল 8-এর জন্য, আমি একটি কাস্টম বৈধতা ফাংশন যুক্ত করতে সক্ষম হয়েছিল যা আসলে বিদ্যমান ত্রুটিগুলি পরীক্ষা করতে পারে এবং প্রতি কেস ভিত্তিতে ত্রুটির মার্কআপ পরিবর্তন করতে পারে। আমার ক্ষেত্রে, আমি কোনও সত্তা_আউটোকম্পলিট ফিল্ড থেকে ত্রুটি বার্তাটি পরিবর্তন করতে চেয়েছিলাম যা ব্যবহারকারীদের উল্লেখ করছে। যদি কোনও অবৈধ ব্যবহারকারীর যোগ করা হয়, তবে বৈধতা ত্রুটিটি পড়ল, "% নামের সাথে কোনও সত্তা নেই"। "সত্তা" শব্দের পরিবর্তে, আমি এটি ব্যবহারকারীর কাছে কম ভীতিজনক এবং সম্ভাব্য বিভ্রান্তিকর হওয়ার জন্য "ব্যবহারকারী" বলতে চাইতাম।

প্রথমত, আমি আমার বৈধতা ফাংশন যোগ করতে hook_for_alter () ব্যবহার করি:

/**
 * Implements hook_form_alter().
 */
function my_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {

      if (in_array($form_id, ['whatever_form_id_you_need_to_alter'])) {
        // Add entity autocomplete custom form validation messages alter.
        array_unshift($form['#validate'], 'my_module_custom_user_validate');
      }

তারপরে, 'মাই_মডিউল_ কাস্টম_ইউজার_অালিডিয়েট' ফাংশনে:

/**
 * Custom form validation handler that alters default validation.
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
*/
function my_module_custom_user_validate(&$form, FormStateInterface $form_state) {
      // Check for any errors on the form_state
      $errors = $form_state->getErrors();
      if ($errors) {
        foreach ($errors as $error_key => $error_val) {
          // Check to see if the error is related to the desired field:
          if (strpos($error_key, 'the_entity_reference_field_machine_name') !== FALSE) {
            // Check for the word 'entities', which I want to replace
            if (strpos($error_val->getUntranslatedString(), 'entities') == TRUE) {
              // Get the original args to pass into the new message
              $original_args = $error_val->getArguments();
              // Re-construct the error
              $error_val->__construct("There are no users matching the name %value", $original_args);
            }
          }
        }
      }
    }

আশাকরি এটা সাহায্য করবে!

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