Điểm:0

Truyền một giá trị qua URL tới biểu mẫu chỉnh sửa nút và sử dụng nó để chuyển hướng sau khi lưu nút

lá cờ cn

Tôi có một nút bao gồm một loạt chế độ xem được nhúng.Khi hiển thị, tôi phải chuyển một giá trị qua đối số URL (http://example.org/node/x?id=y), để các dạng xem có thể nhận được thông tin thích hợp. Người dùng cần có thể chỉnh sửa nút này, nhưng khi họ lưu và quay lại nút thì nó đã bị mất id=y một phần và màn hình không đầy đủ.

Tôi biết tôi có thể sử dụng hook_form_alter() để chuyển hướng, nhưng tôi không thể hiểu làm cách nào tôi có thể chuyển hướng sau khi nút được lưu bằng đối số URL đó?

gmak avatar
lá cờ cn
@apaderno - Cảm ơn bạn đã chỉnh sửa bài đăng của tôi để làm rõ.
lá cờ in
Bạn đang sử dụng phiên bản Drupal nào?
gmak avatar
lá cờ cn
Tôi đang sử dụng Drupal 9
Điểm:0
lá cờ us

sử dụng hook_form_alter(), bạn có thể thêm trình xử lý gửi để đặt chuyển hướng. Mã cho trình xử lý gửi sẽ tương tự như mã sau.

function mymodule_node_edit_submit(mảng &$form, FormStateInterface $form_state) {
  $node = $form_state->getFormObject()->getEntity();
  $id = \Drupal::request()->query->get('id');
  $form_state->setRedirect('entity.node.canonical', ['node' => $node->id()], [query => ['id' => $id]]);
}

mã cho hook_form_BASE_FORM_ID_alter() sẽ chỉ đơn giản là một trong những điều sau đây.

function mymodule_form_node_form_alter(&$form, FormStateInterface $form_state) {
  $node = $form_state->getFormObject()->getEntity();

  // Vì hook này được gọi cho mọi nút, hãy kiểm tra loại nội dung của nó.
  if ($node->getType() == 'loại nội dung bạn quan tâm') {
    $form['actions']['submit']['#submit'][] = 'mymodule_node_edit_submit';
  }
}

Các hook_form_FORM_ID_alter() thực hiện nên được đặt tên mymodule_form_node_<content_type_machine_name>_alter(). (Thay thế mymodule với tên máy mô-đun, <content_type_machine_name> với tên máy loại nội dung.) Trong trường hợp này, do hook chỉ được gọi cho một loại nội dung, nên nó không cần kiểm tra loại nội dung nút trước khi thêm trình xử lý gửi.

gmak avatar
lá cờ cn
Một cái gì đó không hoạt động. Nếu url của tôi là ```http://example.org/node/123?id=57```, thì sau khi gửi biểu mẫu, nó sẽ được chuyển hướng đến ```http://example.org/node/123?id ```. Vì vậy, có vẻ như tham số truy vấn id không được thêm vào. Nếu tôi thực hiện ```dpm($id)``` trong một trong hai hàm, nó sẽ hiển thị là NULL - điều này khiến tôi nghĩ rằng truy vấn không được ghi lại từ nút ban đầu. Tôi đã bỏ lỡ một cái gì đó?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.