it-swarm-vi.com

Theo mẫu đăng ký người dùng

Tôi muốn tạo chủ đề cho biểu mẫu đăng ký người dùng trong Drupal 7 bằng cách thêm đánh dấu mới, v.v. Tôi dường như không thể tìm ra cách thực hiện.

Tôi đã theo dõi một vài hướng dẫn gợi ý rằng bạn chỉ cần gọi hook_theme trong template.php và sử dụng chức năng chủ đề tương ứng:

function mytheme_theme(){
  return array(
    'user_register' => array(
      'arguments' => array('form' => NULL),
    ),
  );
}

function mytheme_user_register($form) {
  // print, die, etc
}

Nhưng điều này không làm gì cả, bất kể tôi làm gì trong hàm theme_user_register(), hoặc bao nhiêu lần tôi xóa bộ nhớ cache.

Bất kỳ suy nghĩ về cách làm điều này trong D7?

7
ebeyrent

Hóa ra tôi cần sự kết hợp của các thay đổi:

Tôi đã phải thực hiện hook_form_alter() trong một mô-đun và đặt biểu mẫu #theme bất động sản:

function mymodule_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $form['#theme'] = 'user_register';
}

Và sau đó trong template.php:

function mytheme_theme($existing, $type, $theme, $path){
  return array(
    'user_register' => array(
      'render element' => 'form',
      'template' => 'templates/user-register',
    ),
  );
}

function mytheme_preprocess_user_register(&$variables) {
  $variables['rendered'] = drupal_render_children($variables['form']);
}

Và sau đó tôi đã thêm user-register.tpl.php với đánh dấu mong muốn của mình và

<?php echo $rendered; ?> 

để in mẫu.

9
ebeyrent

Định nghĩa của chức năng chủ đề được đưa ra từ việc triển khai hook_theme () là sai:

  • Trong Drupal 7, chỉ số mảng "đối số" không được sử dụng nữa; bạn nên sử dụng "phần tử kết xuất" (như trong trường hợp này) hoặc "biến".
  • Hàm chủ đề nhận được một đối số khác nhau, trong Drupal 7, đó là &$variables; trong trường hợp của bạn, bạn nên sử dụng $form = $variables['form'], một khi bạn đã xác định hàm chủ đề bằng chỉ mục mảng tôi đã báo cáo ở điểm trước. Xem những gì đã thực hiện trong theme_locale_date_format_form () (hàm chủ đề được sử dụng cho biểu mẫu được xác định bởi locale_date_format_form () , được định nghĩa trong locale_theme () , hoặc trong theme_status_Vport () , được định nghĩa trong system_theme () .
3
kiamlaluno

Tôi nghĩ rằng điều này là có thể mà không cần phải làm bất kỳ mô-đun. Có một đề xuất chủ đề tích hợp cho trang đăng ký người dùng và đó là trang - user - register.tpl.php

2
Carlos Muñiz

Bạn có thể dùng hook_form_alter để thay đổi các thành phần của biểu mẫu và thêm đánh dấu tùy chỉnh bằng cách thêm các thành phần biểu mẫu đánh dấu. Bạn cũng có thể đặt chức năng chủ đề nào sẽ sử dụng có thể là chức năng chủ đề tùy chỉnh của riêng bạn.

Xem FAPI để biết thêm chi tiết.

2
googletorp

Đây là chức năng chính xác:

@see hook_form_FORM_ID_alter

function hook_form_user_login_alter(&$form, &$form_state, $form_id) {
  // Modification for the form with the given BASE_FORM_ID goes here. For
  // example, if BASE_FORM_ID is "node_form", this code would run on every
  // node form, regardless of node type.

  // Add a checkbox to the node form about agreeing to terms of use.
  $form['terms_of_use'] = array(
    '#type' => 'checkbox', 
    '#title' => t("I agree with the website's terms and conditions."), 
    '#required' => TRUE,
  );
}
1
Adam S