it-swarm-vi.com

Cách thêm hook thay đổi hình thức trong drupal 8

Tôi rất mới với drupal 8, tôi đang cố gắng thay đổi một biểu mẫu dưới loại nội dung tùy chỉnh "Câu hỏi". Biểu mẫu có id "dạng câu hỏi nút".

Tôi đã thiết lập một mô-đun và cố gắng thêm hook_FORM_ID_alter () nhưng nó không bao giờ được gọi. Ngay cả móc đơn giản nhất cũng không hoạt động. ví dụ:

function constellator_form_alter(&$form, &$form_state, $form_id){ echo "alter the form"; exit; }

trong đó 'chòm sao' là tên mô-đun.

Tôi đã bị mắc kẹt từ sáng và không có gì làm việc cho tôi, Bất kỳ trợ giúp sẽ được đánh giá cao.

Cảm ơn Gaurav Mehra

6
Gaurav

Dưới đây là một ví dụ hoạt động mà tôi đã lấy từ một dự án và được thay đổi để có tên mô-đun của bạn.

Thêm phần này vào đầu tệp .module của bạn:

use Drupal\Core\Form\FormStateInterface;

Sau đó sao chép nó vào

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

  // Adding custom validation for the welcome page type field.
  if ($form_id == 'node_article_edit_form' || $form_id == 'node_article_form') {
    // Do some stuff.
  }
}

Tôi nghĩ rất có thể những gì bạn không làm là xóa bộ đệm Drupal để đăng ký hook. Bạn có thể nhấp vào "xóa tất cả bộ nhớ cache". Hoặc tốt hơn nữa, cài đặt tiện ích dòng lệnh drush và sử dụng "crush cr".

enter image description here

10
oknate

Nếu bạn đã thiết lập một chủ đề tùy chỉnh, thì không cần thêm bất kỳ yêu cầu không gian tên nào, bạn có thể dễ dàng thay đổi biểu mẫu của mình bằng cách sử dụng hook_form_form_id_alter() trong tệp theme_name.theme.

function bootstrap_ga_form_user_login_form_alter(&$form, &$form_state, $form_id) {
  global $base_url;
  $form['#validate'][] = '_bootstrap_ga_form_user_login_form_validate';
}

Tôi đã thêm một xác nhận tùy chỉnh vào mẫu đăng nhập người dùng. bootstrap_ga là tên chủ đề tùy chỉnh.

3
Vinodhini

Hãy thử nó trong mô-đun tùy chỉnh của bạn

Sử dụng không gian tên dưới đây

    use Drupal\node\Entity\Node;
    use Drupal\Core\Form\FormStateInterface;

Sử dụng hook_form_alter này cho nút cụ thể

    //constellator_form_node_question_form_alter
function modulename_form_Form_ID_form_alter(&$form, &$form_state, $form_id){   
  //echo <pre>; print_r($form); die;
}

Và hook này sẽ được sử dụng để chỉnh sửa id dạng nút cụ thể

1
logeshvaran