it-swarm.asia

كيفية تعيين رسائل خطأ متعددة مع form_set_error؟

ألاحظ أنه يمكنني تمرير متغير رسالة إلى form_set_error().

كيف يمكنني تمرير رسائل متعددة؟

حاولت الاتصال form_set_error () عدة مرات ، ولكن دائمًا يتم عرض الأول.

باختصار ، أريد أن أظهر شيئًا كهذا:

  • خطأ 1
  • خطأ 2
  • الخطأ 3

حاليًا ، يمكنني فقط الحصول على:

  • خطأ 1

بعد ذلك ، بمجرد أن يصححها المستخدمون ، ثم يعيد إرسالها ، يحصلون على:

  • خطأ 2

    إذا (strpos ($ form_state ["قيم"] ["هيئة"] ، "

    إذا (strpos ($ form_state ["قيم"] ["هيئة"] ، "

إذا تسببت عبارات التحكم هذه في حدوث خطأ ، فسيتم عرض العبارة الأولى فقط. بعد تصحيح المستخدم للخطأ ، تظهر رسالة الخطأ الثانية.

6
giorgio79

سوف أقوم بتغيير الرمز لإصدار استدعاء واحد لـ form_set_error() لكل عنصر:

$errors = array();
if (strpos($form_state["values"]["body"], "<h1") === true)
    $error_messages["body"][] = "Blalalabalbal bablalbabla.";

if (strpos($form_state["values"]["body"], "<h3") === false)
    $error_messages["body"][] = "Do this do that balbablalba.";

foreach ($error_messages as $element => $messages) {
    form_set_error($element, theme('item_list', array('items' => messages)));
}
10
janusman

لقد أنشأت وظيفة منفصلة لذلك:

function form_set_error_multiple($name = NULL, $messages = '', $limit_validation_errors = NULL) {
  return form_set_error('extra][items', implode('</li><li>', $messages));
}

وبعد ذلك يمكنني تسميتها بهذا الشكل:

$errors = array();
$errors[] = 'My element error';
$errors[] = 'Another error for the same element';

if ($errors) {
  form_set_error_multiple('my_element', $errors);
}
2
Rafal Enden

هل تقوم بتمرير اسم عنصر الإدخال إلى form_set_error()؟

وفقًا لاسم الوظيفة ، يمكنك تمرير رسالة واحدة لكل مكالمة دالة.

1
Codium

لقد قمت بحل هذا مع "الاختراق":

$error_messages = "";
if (strpos($form_state["values"]["body"], "<h1") === true)
   $error_messages .= "Error Message on First Line <br/>";
}
if (strpos($form_state["values"]["body"], "<h3") === false){
   $error_messages .= "Error Message on Another Line <br/>";
}
// next check if there are any errors, and if so, write them to form_set_error
if(strlen($error_messages) > 0){
  form_set_error('',$error_messages);
}

سيعرض هذا جميع الأخطاء المتراكمة كرسالة Drupal.

0
mparker1113