it-swarm-vi.com

Chuyển hướng đến một trang tùy chỉnh sau khi một nút đã được thêm hoặc chỉnh sửa

Sử dụng hook_form_alter, Làm cách nào tôi có thể chuyển hướng người dùng đến trang tùy chỉnh sau khi tạo hoặc chỉnh sửa nút thay vì nút được tạo hoặc chỉnh sửa?

Mã hiện tại cho hook_form_alter() là mã sau:

function custom_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'custom-node-form') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
  }
}
14
Citricguy
function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#node']->type == 'custom') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
    $form['#submit'][] = 'custom_node_submit';
  }
}

function custom_node_submit($form, &$form_state) {
  $form_state['redirect'] = 'choose/your/path';
}

Mã chuyển hướng biểu mẫu độc lập với nút được nhấp để gửi biểu mẫu. Nếu bạn muốn chuyển hướng một biểu mẫu chỉ khi nhấp vào nút gửi cụ thể, thì bạn nên sử dụng mã sau đây.

function custom_form_node_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#node']->type == 'custom') {
    $form['actions']['submit']['#value'] = t('Add Entry');
    $form['field_custom_email']['und'][0]['value']['#element_validate'] = array('_custom_form_validate_email');
    $form['actions']['submit']['#submit'][] = 'custom_node_submit';
  }
}

function custom_node_submit($form, &$form_state) {
  $form_state['redirect'] = 'choose/your/path';
}

  • ID mẫu không chứa dấu gạch nối. ID biểu mẫu là tên của hàm PHP tạo ra biểu mẫu (a.k.a. trình tạo biểu mẫu) và a PHP không thể chứa dấu gạch nối trong tên của nó.
  • ID biểu mẫu được chuyển cho các cài đặt của hook_form_alter () , hook_form_BASE_FORM_ID_alter ()hook_form_FORM_ID_alter () . hook_form_FORM_ID_alter() không thực sự cần nó, vì nó được gọi cho một hình thức cụ thể, trong khi hai hook khác được gọi cho nhiều hơn một hình thức.
  • Hàm đầu tiên là triển khai hook_form_BASE_FORM_ID_alter () ; trong trường hợp này, ID biểu mẫu cơ sở là "node_form" là biểu mẫu cơ sở cho biểu mẫu chỉnh sửa nút.
  • Biểu mẫu chỉnh sửa nút chứa $form['#node'], Là đối tượng nút cho đối tượng được chỉnh sửa; "Tùy chỉnh" là ID ngắn cho loại nội dung bạn muốn chuyển hướng người dùng sau khi họ chỉnh sửa một nút.
  • Thay đổi $form_state['redirect'] Từ hook_form_alter() không có bất kỳ ảnh hưởng nào; nó cần phải được thiết lập từ một trình xử lý đệ trình.
16
kiamlaluno

Mã này hoạt động trên một trang web Drupal 7.

/**
 * Implements hook_form_alter()
 */

function custom_form_alter(&$form, &$form_state, $form_id) {    
  if ($form_id == 'article_node_form') {
    $form['actions']['submit']['#submit'][] = 'mysubmit_node_submit';
  }     
}

function mysubmit_node_submit($form, &$form_state) {
  $form_state['redirect'] = '/homepage';
}
9
sea26.2

Điều này có thể được thực hiện bằng cách đặt $form_state['redirect'], Ví dụ: sử dụng một trong các dòng sau.

$form_state['redirect'] = "some-internal-path";
$form_state['redirect'] = array($path, $options_array, $http_code);

Đó là cùng một đối số mà bạn sẽ chuyển đến drupal_goto() .

4
Shoaib Nawaz

Không chắc đây có phải là một tùy chọn cho bạn không, nhưng nếu đây là loại nội dung bạn có thể đạt được điều này khá nhanh bằng cách sử dụng mô-đun Quy tắc bằng cách đặt quy tắc được kích hoạt khi cập nhật hoặc tạo một loại nội dung nhất định.

2
Aaron Ortega