it-swarm-vi.com

Làm cách nào để đặt nhiều thông báo lỗi với form_set_error?

Tôi nhận thấy tôi có thể chuyển một biến thông báo tới form_set_error().

Làm thế nào tôi có thể vượt qua trong nhiều tin nhắn?

Tôi đã thử gọi form_set_error () nhiều lần, nhưng luôn luôn lần đầu tiên được hiển thị.

Vì vậy, để tóm tắt, tôi muốn thể hiện một cái gì đó như thế này:

  • lỗi 1
  • lỗi 2
  • lỗi 3

Hiện tại, tôi chỉ có thể nhận được:

  • lỗi 1

Sau đó, khi người dùng sửa nó và gửi lại, họ sẽ nhận được:

  • lỗi 2

    if (strpose ($ form_state ["value"] ["body"], "

    if (strpose ($ form_state ["value"] ["body"], "

Nếu cả hai câu lệnh điều khiển này gây ra lỗi, chỉ có câu lệnh đầu tiên được hiển thị. Sau khi người dùng sửa lỗi, thông báo lỗi thứ hai được hiển thị.

6
giorgio79

Tôi sẽ thay đổi mã để thực hiện một cuộc gọi đến form_set_error() cho mỗi phần tử:

$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

Tôi đã tạo chức năng riêng cho việc đó:

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

Và sau đó tôi có thể gọi nó như thế:

$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

Bạn có chuyển tên phần tử đầu vào cho form_set_error() không?

Theo tên chức năng, bạn có thể truyền một tin nhắn cho mỗi cuộc gọi chức năng.

1
Codium

Tôi đã giải quyết điều này bằng một "hack":

$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);
}

Điều này sẽ hiển thị tất cả các lỗi tích lũy dưới dạng Drupal.

0
mparker1113