Lập trình đặt giá trị mặc định cho một trường


10

Trong Drupal 6, chúng ta có thể sử dụng PHP để đặt các giá trị mặc định, nhưng cùng một mã không thể được sử dụng với Drupal 7.

Tôi đang cố gắng thực hiện điều này thông qua hook_form_alter(), nhưng mã không hoạt động.

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);

  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"]["und"]['#default_value'] = $default;
      // …
      break;
  }
}

Câu trả lời:


17

Giả sử rằng hàm thay đổi biểu mẫu của bạn thực sự đang chạy (mà bạn có thể xác nhận với lệnh gọi đó dsm()), thực tế có thêm 2 cấp độ mảng bạn cần phải đi xuống để đến phần tử trường:

$form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;

Trong Drupal 7, bạn có một mảng các giá trị cho mỗi ngôn ngữ, trường đã được dịch sang (để các trường có nhiều thẻ / không giới hạn có thể được phục vụ) và dưới mỗi ngôn ngữ đó nằm trong mảng cho các cột trường khác nhau. Trong phần lớn các trường hợp, đây sẽ là 'giá trị' nhưng không phải luôn luôn (ví dụ: trường hình ảnh có cột id tệp, cột alt, v.v.)

Mong rằng sẽ giúp


Đó là một chiều sâu nữa :)$form["field_accounts"]["und"][0]["value"]['#default_value'] = $default;
giorgio79

2
Câu trả lời này sẽ không hoạt động cho tất cả các vật dụng; phụ thuộc vào cách họ chỉ định giá trị của họ. Ví dụ: với trường thực thể, hãy sử dụng: $ form ['field_name'] ['und'] [0] ['target_id'] ['# default_value'] = $ default
Renee

@Renee Rất đúng; có một lời giải thích sâu hơn ở đây
Clive

1
Giá trị trường luôn có ngôn ngữ @Mouneer, nếu bạn không có trang web đa ngôn ngữ thì LANGUAGE_NONEnên sử dụng mặc định
Clive

1
Thật vậy, tôi có thể giải thích rằng @Mouneer tốt hơn một chút :) Bạn sẽ tìm thấy ngôn ngữ hiện tại ở dạng nào đó (tôi nghĩ có thể $form['#entity']->languagenhưng tôi phải kiểm tra, để có thể sử dụng nó thay cho hằng số. cũng sẽ sử dụng ngôn ngữ hiện tại như được xác định bởi $languagetoàn cầu, nhưng vẫn có các phương thức API để trợ giúp bằng cách đó ( field_get_itemshoặc thậm chí tốt hơn EntityMetadataWrapperđược cung cấp bởi mô-đun thực thể)
Clive

0

Điều này đúng:

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);

  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;
      // …
      break;
  }
}

0

Điều này hoạt động tốt:

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);
  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"]["und"][0]['value']['#default_value']=$default;
      break;
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.